题目描述:
给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。
注意,删除一个元素后,子数组 不能为空。
示例:



解题思路:
sum0存储不删除子数组的和,sum1存储删除一个元素的子数组的和,通过循环,获取最大值进行输出。
代码附上:
class Solution {
public int maximumSum(int[] arr) {
int sum0=arr[0],sum1=arr[0],ref=arr[0];
for(int i=1;i<arr.length;i++) {
sum1=Math.max(sum0,sum1+arr[i]);
sum0=Math.max(sum0,0)+arr[i];
ref=Math.max(ref,Math.max(sum0,sum1));
}
return ref;
}
}
给定一个整数数组,可以选择删除一个元素以找到最大子数组和。算法通过维护两个变量sum0和sum1分别表示不删除和删除一个元素后的子数组最大和,遍历数组更新这两个变量,并用ref记录最大结果。最后返回ref作为答案。

被折叠的 条评论
为什么被折叠?



