LeetCode——劍指 Offer 42. 連續子陣列的最大和(Java)
阿新 • • 發佈:2021-07-17
題目描述
題幹:
輸入一個整型陣列,陣列中的一個或連續多個整陣列成一個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為O(n)。
示例1:
輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋:連續子陣列[4,-1,2,1] 的和最大,為6。
題解思路
返回連續子陣列和最大值,直接強制命令你時間複雜度為O(n) 明顯你提示你最佳答案是一次迴圈就可以解決,當然也不排除有更佳的辦法 這裡我們採用一次迴圈的做法,每次新增新元素後比較和新元素作比較 如果沒有當前新元素大,說明前面的和為負數,所以直接儲存當前元素,否則就儲存和 之後每次比較當前和和以前儲存的和,取出最大值即可
正確程式碼
public int maxSubArray(int[] nums) {
int pre = 0, ans = nums[0];
for (int num : nums) {
pre = Math.max(num, pre + num);
ans = Math.max(pre, ans);
}
return ans;
}
總結
官方給出了一個分支線段樹的方法,不過確實不是我現在能參悟的 在維護和修改的方面來說確實是高,希望自己瞭解了線段樹之後可以靈活運用到類似題目上 如果文章存在問題或則和有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見