1. 程式人生 > 其它 >LeetCode——劍指 Offer 42. 連續子陣列的最大和(Java)

LeetCode——劍指 Offer 42. 連續子陣列的最大和(Java)

題目描述

題幹:
輸入一個整型陣列,陣列中的一個或連續多個整陣列成一個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為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;
    }

總結

官方給出了一個分支線段樹的方法,不過確實不是我現在能參悟的

在維護和修改的方面來說確實是高,希望自己瞭解了線段樹之後可以靈活運用到類似題目上

如果文章存在問題或則和有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見