給你一個整數數組?nums
?,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。
子數組是數組中的一個連續部分。
示例 1:
輸入:nums = [-2,1,-3,4,-1,2,1,-5,4] 輸出:6 解釋:連續子數組?[4,-1,2,1] 的和最大,為?6 。
示例 2:
輸入:nums = [1] 輸出:1
示例 3:
輸入:nums = [5,4,-1,7,8] 輸出:23
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
進階:如果你已經實現復雜度為?O(n)
?的解法,嘗試使用更為精妙的?分治法?求解。
class Solution {
public:int maxSubArray(vector<int>& nums) {int i = 0;int ans = nums[0];for(const auto & x : nums){i = max(x,i+x);ans = max(ans,i);}return ans;}
};