看到這題難度為簡單,我陷入了沉思! 思考了30分鐘我一行代碼沒寫出來,我又陷入了沉思
——leetcode此題熱評

前言
今天看到群裡一個兄弟校招進了阿裡。
說實話,羨慕之極又感歎時光易逝。
不過隻要你想努力,什麼時候都不算晚。
看題吧!
Question
難度:簡單
給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),傳回其最大和。
示例 1:
輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續子數組 [4,-1,2,1] 的和最大,為 6 。
示例 2:
輸入:nums = [1]
輸出:1
示例 3:
輸入:nums = [0]
輸出:0
示例 4:
輸入:nums = [-1]
輸出:-1
示例 5:
輸入:nums = [-100000]
輸出:-100000
提示:
1 <= nums.length <= 3 * 104
-105 <= nums[i] <= 105
Solution
此題可以用或者
貪心算法
但仔細分析其實隻是同一個的方向的兩種思考方式
動态規劃
- 明确一個問題,如果之前的和大于零,對結果有增益,小于零,無增益,舍去。
-
:若目前指針所指元素之前的和小于0,則丢棄。貪心算法
-
:若前一個元素大于0,則将其加到目前元素上。動态規劃
- 兩種一個是
,一個是if
。else
Code
所有代碼已同步至 github 歡迎
leetcode
star
class Solution {
public int maxSubArray(int[] nums) {
int maxSum=nums[0];
int cursum=0;
for (int i = 0; i < nums.length; i++) {
if (cursum > 0) {
cursum += nums[i];
} else {
cursum = nums[i];
}
maxSum = Math.max(maxSum, cursum);
}
return maxSum;
}
}
Result
複雜度分析
- 時間複雜度:O(N)
![]()
【leetcode刷題】7.最大子序和——Java版