LeetCode-劍指Offer-42-連續子數組的最大和


題意描述:

輸入一個整型數組,數組裏有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。 要求時間複雜度爲O(n)。

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

示例:

輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子數組 [4,-1,2,1] 的和最大,爲 6

解題思路:


代碼:
Python 方法一: 動態規劃。

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:

        ret = nums[0]
        pre = 0

        for x in nums:
            
            if pre <= 0:     // 往者皆可拋,以上一個數字爲結尾的子數組的和已經小於等於0了,重新開始
                pre = x
            else:
                pre += x     //  繼續累積
            
            if pre > ret:     // 從 n 個“最大值”中挑出一個最大的
                ret = pre

        return ret

Java 方法一: 動態規劃。

class Solution {
    public int maxSubArray(int[] nums) {

        int ret = nums[0];
        int pre = 0;

        for(int i=0; i<nums.length; ++i){

            if(pre <= 0){
                pre = nums[i];
            }else{
                pre += nums[i];
            }

            if(pre > ret){
                ret = pre;
            }
        }

        return ret;
    }
}

易錯點:

  • 一些測試用例:
[-2,1,-3,4,-1,2,1,-5,4]
[1,2,3,4,3,4]
[-2,-1,-2]
[1,-1]
[2]
  • 答案:
6
17
-1
1
2

總結:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章