題目:
給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。
示例:
輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子數組 [4,-1,2,1] 的和最大,爲 6。
進階:
如果你已經實現複雜度爲 O(n) 的解法,嘗試使用更爲精妙的分治法求解。
方法一:貪心
詳解:第一個元素不變(就是當前位置的最大值),數組中每個位置 nums[i] 上存放的是 與前面的連續子數組(或者是一個元素)構成連續子數組或者單獨成爲一個元素 的最大值(即要麼是nums[ i - 1] + nums[i] 要麼是 nums[i])——誰大取誰
這樣一輪之後每個位置上取到了包含該元素以及該元素之前的所有元素的最大和,最後從nums數組中找到最大值,就是本題所求。
代碼:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int max = nums[0] ;
for(int i = 1 ;i < nums.size() ; i++ ){
if(nums[i] + nums[i - 1] > nums[i]) nums[i] = nums[i - 1] + nums[i] ;
max = max >nums[i] ? max : nums[i] ;
}
return max;
}
};