所能得到的最大元素總和
阿新 • • 發佈:2020-08-06
給你一個整數陣列,返回它的某個 非空 子陣列(連續元素)在執行一次可選的刪除操作後,所能得到的最大元素總和。
換句話說,你可以從原陣列中選出一個子陣列,並可以決定要不要從中刪除一個元素(只能刪一次哦),(刪除後)子陣列中至少應當有一個元素,然後該子陣列(剩下)的元素總和是所有子陣列之中最大的。
注意,刪除一個元素後,子陣列 不能為空。
請看示例:
示例 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; } }