Leetcode 53. Maximum Subarray 贪心或动态规划
2017-11-03 23:39
483 查看
题目
Maximum Subarray给定一个整数数组nums
,让我们找出其相邻元素构成的子串的最大和。
例如:数组 [-2, 1,- 3, 4, -1, 2, 1, -5, 4], 其子串 [4,-1,2,1] 具有最大和为 6。
思路
贪心假设已知一个连续子串的和sum,
如果sum >= 0,则sum对于后面的元素有利,可以保留用于后续计算
如果sum < 0,则sum对后面元素不利,重置为0
然后维护一个全局的max即可
动态规划
状态:f[i] 表示以 元素nums[i] 结尾的子串的最大和
状态转移:f[i+1] = max {f[i] + nums[i+1], nums[i+1]}
代码
贪心class Solution { public: int maxSubArray(vector<int>& nums) { int sum, max; sum = 0; max = nums[0]; for (int i = 0; i < nums.size(); i++) { sum += nums[i]; max = sum > max? sum: max; sum = sum > 0? sum: 0; } return max; } };
动态规划
class Solution { public: int maxSubArray(vector<int>& nums) { //f[i]为以nums[i]结尾的子串的最大和 //f[i] = max {f[i-1] + nums[i], nums[i]} int *f = new int[nums.size()]; int maxsum; f[0] = maxsum = nums[0]; for (int i = 1; i < nums.size(); i++) { f[i] = max(f[i - 1] + nums[i], nums[i]); maxsum = f[i] > maxsum? f[i]: maxsum; } return maxsum; } };
相关文章推荐
- leetcode 53. Maximum Subarray-最大子数组|动态规划
- LeetCode53. Maximum Subarray 动态规划和分治法
- 【Leetcode】53. Maximum Subarray【动态规划】
- Leetcode解题笔记 53. Maximum Subarray [Easy] 动态规划
- [leetCode]53. Maximum Subarray&&动态规划
- 【LeetCode】53. Maximum Subarray
- [Leetcode] 53. Maximum Subarray 解题报告
- 【leetcode】53. Maximum Subarray
- LeetCode[递归]53. Maximum Subarray 数组最大和
- LeetCode 53. Maximum Subarray
- leetcode 53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- leetcode 53. Maximum Subarray python
- 【leetcode】53. Maximum Subarray
- leetcode 53. Maximum Subarray 动态规划DP + 最大子串和
- leetcode 53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- Leetcode 53. Maximum Subarray
- leetcode-53. Maximum Subarray