1186. 删除一次得到子数组最大和

发布时间 2023-06-27 17:23:20作者: Tianyiya

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

注意,删除一个元素后,子数组 不能为空。

来源:力扣(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;
    }
}