题目来源:
leetcode题目,网址:53. 最大子数组和 - 力扣(LeetCode)
解题思路:
动态规划,假设以第 i 个元素为结尾的最大子数组和为 dp[i],则 dp[i]=max(dp[i-1]+nums[i],nums[i])。最后返回其中最大值即可。
解题代码:
- class Solution {
- public:
- int maxSubArray(vector<int>& nums) {
- int maxSum=nums[0];
- int pre=nums[0];
- for(int i=1;i<nums.size();i++){
- pre=max(pre+nums[i],nums[i]);
- maxSum=max(pre,maxSum);
-
- }
- return maxSum;
- }
- };
总结:
官方题解给出了两种解法。第一种是动态规划。第二种是分治,分治法利用递归将原来的数组切割为一个一个的小数组,在小数组内获得问题的解,然后不断合并小数组,在此期间,根据小数组的信息得到大数组的相应信息。最后所有的小数组被合并为一个时,得到的数据即为所求。