思路:使用动态规划,分别计算不删和删一个数的情况下的最大子数组和。最后比较两种情况下的最大值即可。

具体实现:

class Solution {
    public int maximumSum(int[] arr) {
        int n = arr.length;
        int[] dp1 = new int[n]; // 不删的情况下的最大子数组和
        int[] dp2 = new int[n]; // 删一个数的情况下的最大子数组和
        dp1[0] = arr[0];
        dp2[0] = Integer.MIN_VALUE;
        int res = arr[0];
        for (int i = 1; i < n; i++) {
            dp1[i] = Math.max(dp1[i-1] + arr[i], arr[i]); // 不删
            dp2[i] = Math.max(dp2[i-1] + arr[i], dp1[i-1]); // 删一个数
            res = Math.max(res, Math.max(dp1[i], dp2[i]));
        }
        return res;
    }
}
``
Java 实现 给你一个整数数组返回它的某个 非空 子数组连续元素在执行一次可选的删除操作后所能得到的最大元素总和。换句话说你可以从原数组中选出一个子数组并可以决定要不要从中删除一个元素只能删一次哦删除后子数组中至少应当有一个元素然后该子数组剩下的元素总和是所有子数组之中最大的。注意删除一个元素后子数组 不能为空。

原文地址: https://www.cveoy.top/t/topic/fKvU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录