2018年5月2日 下午3:54
Maximum Subarray - LeetCode
- 这道题可以说是的升级版
- 这次遍历的对象是0
1 02….0~(n-1),但是加上一个条件:最右边的单个元素的一定要!
- 直接0~(n-1)不对的原因是:找不到前后的关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public: int maxSubArray(vector<int>& nums) { if(nums.size() == 0) return 0; if(nums.size() == 1) return nums[0]; std::vector<int> dp(nums.size()+1, 0); dp[0] = nums[0]; dp[1] = nums[1]+nums[0] > nums[1] ? nums[1]+nums[0] : nums[1]; int max = dp[0] > dp[1] ? dp[0]: dp[1]; for(int i = 2; i < nums.size(); i++){ if(dp[i-1] > 0){ dp[i] = dp[i-1] + nums[i]; } else{ dp[i] = nums[i]; } if(max < dp[i]) max = dp[i]; } return max; } };
|