讨论/题目交流/🏆 第 153 场力扣周赛/
🏆 第 153 场力扣周赛

这是 9 月的第二场周赛,欢迎小伙伴们在这里交流分享你的参赛心得以及体验。

image.png

这时我的理解:

    public int maximumSum(int[] arr) {

        if(arr == null || arr.length ==0) return 0;

        // 维护删除一个数后最大的值
        int[] dp0 = new int[arr.length];
        // 维护包含当前i值的最大值区间
        int[] dp1 = new int[arr.length];

        dp0[0] = arr[0];
        dp1[0] = arr[0];
        int ans = arr[0];

        for(int i = 1;i < arr.length;i++)
        {
            // 是添加上这个值的大,还是删除当前i值后包含i-1的值的区间大
            dp0[i] = Math.max(dp0[i - 1] + arr[i],dp1[i - 1]);
            // 旧区间大点,还是新区间大点,这时候任何数字都没被删除,必须包含当前i值没有删除任何值
            dp1[i] = Math.max(dp1[i - 1] + arr[i], arr[i]);
            // 比较3种情况的值
            ans = Math.max(ans,Math.max(dp0[i],dp1[i]));
        }

        return ans;
    }
展开全部 17 讨论