C ++中带有一个删除的最大子数组总和

假设我们有一个整数数组;我们必须找到一个最多删除一个元素的非空子数组(连续元素)的最大和。换句话说,可以说我们要选择一个子数组并从中删除一个元素,以便仍然剩余至少一个元素,并且剩余元素的总和最大。我们必须记住,删除一个元素后,子数组必须为非空。因此,如果输入类似于[1,-2,0,3],则输出将为4。因此,如果我们删除-2,它将返回最大值。

为了解决这个问题,我们将遵循以下步骤-

  • n:=数组大小,和:= a [0]

  • suff_with_del:= 0,suff_with_out_del:= a [0]

  • 对于介于i到n – 1之间的i

    • suff_with_del:= suff_with_del的最大值+ a [i]和suff_with_out_del

    • suff_with_out_del:= a [i]和suff_with_out_del的最大值+ a [i]

    • ans:= ans,suff_with_out_del和suff_with _del的最大值

  • 返回资源

例子(C ++)

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int maximumSum(vector<int>& a) {
      int n = a.size();
      int ans = a[0];
      int suffix_with_deletion = 0;
      int suffix_with_not_deletion = a[0];
      for(int i = 1;i<n;i++){
         suffix_with_deletion = max(suffix_with_deletion + a[i], suffix_with_not_deletion);
         suffix_with_not_deletion = max(a[i],suffix_with_not_deletion+a[i]);
         ans = max({ans, suffix_with_not_deletion,suffix_with_deletion});
      }
      return ans;
   }
};
main(){
   vector<int> v = {1,-2,0,3};
   Solution ob;
   cout <<ob.maximumSum(v);
}

输入值

[1,-2,0,3]

输出结果

4