在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_incr_subarr(arr , n);
}

输出结果

最大总和: 8