leetCode刷题归纳-Dynamic Programming(53. Maximum Subarray&& 152. Maximum Product Subarray)
2017-06-10 13:54
471 查看
53. Maximum Subarray题目描述
Find the contiguous subarray within an array (containing at least onenumber) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous
subarray [4,-1,2,1] has the largest sum = 6.
解题思路
求一个array里面的的最大加权的连续字串,动态规划的思想,设置一维动态数组即可,假设扫描到索引为i的数字时候状态为dp[i],那么前一个状态dp[i-1]就存在两种情况:>0 或者<=0 我采取的办法是,如果小于等于0那么就抛弃之前的状态—将dp[i-1]重置为0,这样在O(n)的时间复杂度内可以得到最大的dp值,也就是我们需要求出的最大加权字串值class Solution { public: int maxSubArray(vector<int>& nums) { int n=nums.size(); int* dp=new int ; dp[0]=nums[0]; int res=dp[0]; for(int i=1;i<n;i++){ dp[i]=nums[i]+(dp[i-1]>0?dp[i-1]:0); res=max(dp[i],res); } return res; } };
————————————————–此处是分割线————————————————–
152. Maximum Product Subarray题目描述
Find the contiguous subarray within an array (containing at least onenumber) which has the largest product.
For example, given the array [2,3,-2,4], the contiguous subarray [2,3]
has the largest product = 6.
解题思路
跟上面一题很类似,只是计算dp值的规则不同,改成了乘积而已,这里我们需要注意的是,乘积不像求加法,两个负数相乘可能得到很大的正数,所以这里我们需要对乘法进行多种情况考虑(正数x正数,负数x负数,正数x负数),解题方法如下:class Solution { public: int maxProduct(vector<int>& nums) { if(nums.empty()) return 0; //从第一个数字开始处理 int res=nums[0]; int preMax=res,preMin=res; for(int i=1;i<nums.size();i++){ if(nums[i]<0) swap(preMax,preMin);//如果当前处理的数字小于0,那么比较大的数字乘后反而小。。 preMax=max(nums[i],preMax*nums[i]); preMin=min(nums[i],preMin*nums[i]); res=max(res,preMax); } return res; } };
相关文章推荐
- leetcode题解-53. Maximum Subarray && 448. Find All Numbers Disappeared in an Array
- 【LeetCode】152. Maximum Product Subarray && 53. Maximum Subarray
- [leetCode]53. Maximum Subarray&&动态规划
- leetcode--3,Longest Substring Without Repeating Characters &&53. Maximum Subarray&&String.valueOf()
- LeetCode 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- [leetcode] 152. Maximum Product Subarray 解题报告
- <LeetCode OJ> Maximum Subarray【53】
- [Leetcode] 53. Maximum Subarray
- 【LeetCode】53. Maximum Subarray
- [Leetcode]152. Maximum Product Subarray @python
- [LeetCode]53. Maximum Subarray
- leetcode 53. Maximum Subarray
- Leetcode Maximum SubArray & Binary Tree Maximum Path Sum
- 【LeetCode】152. Maximum Product Subarray
- [leetcode] 53. Maximum Subarray
- Leetcode 53. Maximum Subarray
- LeetCode --- 53. Maximum Subarray
- <LeetCode OJ> 152. Maximum Product Subarray
- C#解leetcode 152. Maximum Product Subarray