53. 最大子陣列和

ouyangxx發表於2024-11-10
  1. 題目連結

  2. 解題思路

    • 最大子陣列問題,有兩個基本的想法,以i開頭的子陣列結果是怎樣的,求出所有的結果,最優的那個,就是答案;以i結尾的子陣列結果是怎樣的,求出所有的結果,最優的那個,就是答案。
    • 本題我們可以考慮,「以i結尾的結果是怎樣的」,為啥?因為我們要求的是最大的累加和,我們求出了res1=「以i結尾的結果」,求i+1的結果就很方便了,如果res1為正數,則i+1的結果就是res1 + nums[i + 1],如果res1為負數,則i+1的結果就是nums[i + 1]
  3. 程式碼

    class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
            int n = nums.size();
            int pre = nums[0];   // 0結尾的結果
            int ans = pre;
            for (int i = 1; i < n; ++i) {   // 我們現在求以i結尾的結果是多少
                if (pre > 0) {    // 如果前面的累加和大於0   則加上
                    pre += nums[i];
                } else {    // 否則不加
                    pre = nums[i];
                }
                ans = max(ans, pre);     // 更新結果
            }
            return ans;
        }
    };
    

相關文章