在 C++ 中找到最大和严格递增子数组
假设我们有一个包含 n 个整数的数组。找到和最大的严格递增子数组。所以如果数组像 [1, 2, 3, 2, 5, 1, 7],则和为 8。在这个数组中有三个严格递增的子数组,分别是 {1, 2, 3}、{2, 5} 和 {1, 7}。和最大的子数组是 {1, 7}
要解决这个问题,我们必须跟踪最大和和当前和。对于每个元素 arr[i],如果它大于 arr[i – 1],那么我们将它添加到当前和中,否则 arr[i] 是另一个子数组的起点。所以我们应该将当前和更新为数组。在更新当前和之前,我们将根据需要更新最大和。
示例
#include<iostream> using namespace std; int maximum(int a, int b){ return (a>b)?a:b; } int maximum_sum_incr_subarr(int array[] , int n) { int max_sum = 0; int current_sum = array[0] ; for (int i=1; i<n ; i++ ) { if (array[i-1] < array[i]) current_sum = current_sum + array[i]; else { max_sum = maximum(max_sum, current_sum); current_sum = array[i]; } } return max(max_sum, current_sum); } int main() { int arr[] = {1, 2, 3, 2, 5, 1, 7}; int n = sizeof(arr)/sizeof(arr[0]); cout << "Maximum sum : " << maximum_sum_incr_subarr(arr , n); }
输出
Maximum sum : 8
广告