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