LeetCode系列 -- 面試題42. 連續子數組的最大和

題目:

輸入一個整型數組,數組裏有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。

要求時間複雜度爲O(n)。

示例:

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

思路:

  定義一數組 result 長度與輸入數組 nums 相同

  數組result 中下標 i 表示當子數組包含當前元素nums[i]時的子數組的最大和

  如果 result[i-1] < 0 則result[i] = nums[i]

  否則  result[i] = result[i-1] + nums[i]

 

 public int maxSubArray(int[] nums) {

        int[] result = new int[nums.length];
        int maxSum = nums[0];
        result[0] = maxSum;
        for (int i = 1; i < nums.length; i++) {

            if (result[i - 1] <= 0) {
                result[i] = nums[i];
            } else {
                result[i] = result[i - 1] + nums[i];
            }


            if (maxSum < result[i]) {
                maxSum = result[i];
            }
            //System.out.println(maxSum);
        }
        printArray(result);

        return maxSum;
    }

 

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