From 2b278e96184f531f70c6b6561966f2b5a9a931b1 Mon Sep 17 00:00:00 2001 From: realstealthninja <68815218+realstealthninja@users.noreply.github.com> Date: Fri, 4 Oct 2024 19:59:52 +0530 Subject: [PATCH] feat: remove kadane and replace it with kadane2 --- dynamic_programming/kadane.cpp | 85 +++++++++++++++++++++++++-------- dynamic_programming/kadane2.cpp | 74 ---------------------------- 2 files changed, 65 insertions(+), 94 deletions(-) delete mode 100644 dynamic_programming/kadane2.cpp diff --git a/dynamic_programming/kadane.cpp b/dynamic_programming/kadane.cpp index b5272756b..d048d0d5b 100644 --- a/dynamic_programming/kadane.cpp +++ b/dynamic_programming/kadane.cpp @@ -1,29 +1,74 @@ +/** + * @file + * @brief Implementation of [Kadane + * Algorithm](https://en.wikipedia.org/wiki/Kadane%27s_algorithm) + * + * @details + * Kadane algorithm is used to find the maximum sum subarray in an array and + * maximum sum subarray problem is the task of finding a contiguous subarray + * with the largest sum + * + * ### Algorithm + * The simple idea of the algorithm is to search for all positive + * contiguous segments of the array and keep track of maximum sum contiguous + * segment among all positive segments(curr_sum is used for this) + * Each time we get a positive sum we compare it with max_sum and update max_sum + * if it is greater than curr_sum + * + * @author [Ayush Singh](https://github.com/ayush523) + */ +#include #include #include - -int maxSubArraySum(int a[], int size) { - int max_so_far = INT_MIN, max_ending_here = 0; - - for (int i = 0; i < size; i++) { - max_ending_here = max_ending_here + a[i]; - if (max_so_far < max_ending_here) - max_so_far = max_ending_here; - - if (max_ending_here < 0) - max_ending_here = 0; +/** + * @namespace dynamic_programming + * @brief Dynamic Programming algorithms + */ +namespace dynamic_programming { +/** + * @namespace kadane + * @brief Functions for + * [Kadane](https://en.wikipedia.org/wiki/Kadane%27s_algorithm) algorithm. + */ +namespace kadane { +/** + * @brief maxSubArray function is used to calculate the maximum sum subarray + * and returns the value of maximum sum which is stored in the variable max_sum + * @tparam N number of array size + * @param n array where numbers are saved + * @returns the value of maximum subarray sum + */ +template +int maxSubArray(const std::array &n) { + int curr_sum = + 0; // declaring a variable named as curr_sum and initialized it to 0 + int max_sum = INT_MIN; // Initialized max_sum to INT_MIN + for (int i : n) { // for loop to iterate over the elements of the array + curr_sum += n[i]; + max_sum = std::max(max_sum, curr_sum); // getting the maximum value + curr_sum = std::max(curr_sum, 0); // updating the value of curr_sum } - return max_so_far; + return max_sum; // returning the value of max_sum } +} // namespace kadane +} // namespace dynamic_programming +/** + * @brief Main function + * @returns 0 on exit + */ int main() { - int n, i; - std::cout << "Enter the number of elements \n"; - std::cin >> n; - int a[n]; // NOLINT - for (i = 0; i < n; i++) { - std::cin >> a[i]; + const int N = 5; + std::array n{}; // declaring array + // taking values of elements from user + for (int i = 0; i < n.size(); i++) { + std::cout << "Enter value of n[" << i << "]" + << "\n"; + std::cin >> n[i]; } - int max_sum = maxSubArraySum(a, n); - std::cout << "Maximum contiguous sum is " << max_sum; + int max_sum = dynamic_programming::kadane::maxSubArray( + n); // calling maxSubArray function + std::cout << "Maximum subarray sum is " << max_sum; // Printing the answer + return 0; } diff --git a/dynamic_programming/kadane2.cpp b/dynamic_programming/kadane2.cpp deleted file mode 100644 index d048d0d5b..000000000 --- a/dynamic_programming/kadane2.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @file - * @brief Implementation of [Kadane - * Algorithm](https://en.wikipedia.org/wiki/Kadane%27s_algorithm) - * - * @details - * Kadane algorithm is used to find the maximum sum subarray in an array and - * maximum sum subarray problem is the task of finding a contiguous subarray - * with the largest sum - * - * ### Algorithm - * The simple idea of the algorithm is to search for all positive - * contiguous segments of the array and keep track of maximum sum contiguous - * segment among all positive segments(curr_sum is used for this) - * Each time we get a positive sum we compare it with max_sum and update max_sum - * if it is greater than curr_sum - * - * @author [Ayush Singh](https://github.com/ayush523) - */ -#include -#include -#include -/** - * @namespace dynamic_programming - * @brief Dynamic Programming algorithms - */ -namespace dynamic_programming { -/** - * @namespace kadane - * @brief Functions for - * [Kadane](https://en.wikipedia.org/wiki/Kadane%27s_algorithm) algorithm. - */ -namespace kadane { -/** - * @brief maxSubArray function is used to calculate the maximum sum subarray - * and returns the value of maximum sum which is stored in the variable max_sum - * @tparam N number of array size - * @param n array where numbers are saved - * @returns the value of maximum subarray sum - */ -template -int maxSubArray(const std::array &n) { - int curr_sum = - 0; // declaring a variable named as curr_sum and initialized it to 0 - int max_sum = INT_MIN; // Initialized max_sum to INT_MIN - for (int i : n) { // for loop to iterate over the elements of the array - curr_sum += n[i]; - max_sum = std::max(max_sum, curr_sum); // getting the maximum value - curr_sum = std::max(curr_sum, 0); // updating the value of curr_sum - } - return max_sum; // returning the value of max_sum -} -} // namespace kadane -} // namespace dynamic_programming - -/** - * @brief Main function - * @returns 0 on exit - */ -int main() { - const int N = 5; - std::array n{}; // declaring array - // taking values of elements from user - for (int i = 0; i < n.size(); i++) { - std::cout << "Enter value of n[" << i << "]" - << "\n"; - std::cin >> n[i]; - } - int max_sum = dynamic_programming::kadane::maxSubArray( - n); // calling maxSubArray function - std::cout << "Maximum subarray sum is " << max_sum; // Printing the answer - - return 0; -}