给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。
注意,删除一个元素后,子数组 不能为空。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-subarray-sum-with-one-deletion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处
class Solution {
public int maximumSum(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
if (arr.length == 1) {
return arr[0];
}
// 未删除
int noDeleted = arr[0];
// 已删除
int deleted = 0;
int ans = arr[0];
for (int i = 1; i < arr.length; i++) {
deleted = Math.max(deleted + arr[i], noDeleted + arr[i] - arr[i - 1]);
noDeleted = Math.max(noDeleted + arr[i], arr[i]);
ans = Math.max(ans, Math.max(noDeleted, deleted));
}
return ans;
}
}