From 327aea8e7c0b28dad89d6d9fea31cf597b94958e Mon Sep 17 00:00:00 2001 From: Aditya Karan Date: Wed, 12 Nov 2025 00:34:57 +0530 Subject: [PATCH] Added Kadane's Algorithm with start and end index tracking --- .../kadanes_algorithm_with_indices.cpp | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 dynamic_programming/kadanes_algorithm_with_indices.cpp diff --git a/dynamic_programming/kadanes_algorithm_with_indices.cpp b/dynamic_programming/kadanes_algorithm_with_indices.cpp new file mode 100644 index 00000000000..377af7f250f --- /dev/null +++ b/dynamic_programming/kadanes_algorithm_with_indices.cpp @@ -0,0 +1,40 @@ +#include +using namespace std; + +/* +Kadane's Algorithm (with index tracking) +Time Complexity: O(n) +*/ + +pair> kadane_with_indices(const vector& arr) { + int max_sum = INT_MIN; + int current_sum = 0; + int start = 0, temp_start = 0, end = 0; + + for (int i = 0; i < arr.size(); i++) { + current_sum += arr[i]; + + if (current_sum > max_sum) { + max_sum = current_sum; + start = temp_start; + end = i; + } + + if (current_sum < 0) { + current_sum = 0; + temp_start = i + 1; + } + } + return {max_sum, {start, end}}; +} + +int main() { + vector arr = {-2, -3, 4, -1, -2, 1, 5, -3}; + + auto result = kadane_with_indices(arr); + cout << "Maximum Subarray Sum: " << result.first << "\n"; + cout << "Start Index: " << result.second.first << "\n"; + cout << "End Index: " << result.second.second << "\n"; + + return 0; +}