1. 程式人生 > 實用技巧 >所能得到的最大元素總和

所能得到的最大元素總和

給你一個整數陣列,返回它的某個 非空 子陣列(連續元素)在執行一次可選的刪除操作後,所能得到的最大元素總和。

換句話說,你可以從原陣列中選出一個子陣列,並可以決定要不要從中刪除一個元素(只能刪一次哦),(刪除後)子陣列中至少應當有一個元素,然後該子陣列(剩下)的元素總和是所有子陣列之中最大的。

注意,刪除一個元素後,子陣列 不能為空。

請看示例:

示例 1:

輸入:arr = [1,-2,0,3]
輸出:4
解釋:我們可以選出 [1, -2, 0, 3],然後刪掉 -2,這樣得到 [1, 0, 3],和最大。
示例 2:

輸入:arr = [1,-2,-2,3]
輸出:3
解釋:我們直接選出 [3],這就是最大和。
示例 3:

輸入:arr = [-1,-1,-1,-1]
輸出:-1
解釋:最後得到的子陣列不能為空,所以我們不能選擇 [-1] 並從中刪去 -1 來得到 0。
我們應該直接選擇 [-1],或者選擇 [-1, -1] 再從中刪去一個 -1。

提示:

1 <= arr.length <= 10^5
-10^4 <= arr[i] <= 10^4

第一次

class Solution {
    public int maximumSum(int[] arr) {
        if (arr.length == 1) return arr[0];
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length - 1; i++) {
            int sum = arr[i];
            int minIdx = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIdx]) minIdx = j;
                sum += arr[j];
                max = Math.max(sum, max);
                max = Math.max(max, sum - arr[minIdx]);
            }
        }
        return max;
    }
}