LeetCode 最大子序和 c++ 动态规划,蛮力法
2019-01-24 17:45
211 查看
题目:
给定一个整数数组
nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
1. 蛮力法:
思路:两遍循环,从第一个元素开始对后面组成的子序列 进行求和,然后求其最大值
代码:
[code]class Solution { public: int maxSubArray(vector<int>& nums) { int maxsum=nums[0]; for(int i=0;i<nums.size();i++){ int sum=0; for(int j=i;j<nums.size();j++){ sum=sum+nums[j]; if(maxsum<sum) maxsum=sum; } } return maxsum; } };
2. 动态规划:
思路:很容易观察出这个元素是否在最大子序列中,和这个元素前面的序列和有关。如果前面序列和大于0,则这个元素可能成为最大子序列的一员,若小于0,最大子序列则可能从此元素开始。
代码:
[code]class Solution { public: int maxSubArray(vector<int>& nums) { vector <int> dp(nums.size()); dp[0]=nums[0]; for(int i=1;i<nums.size();i++){//取决于前面的序列和,分两种情况 if(dp[i-1]>0){ dp[i]=dp[i-1]+nums[i]; } else dp[i]=nums[i]; } int maxsum=dp[0];//在dp数组中求最大值 for(int i=0;i<dp.size();i++){ if(dp[i]>maxsum) maxsum=dp[i]; } return maxsum; } };
相关文章推荐
- Leetcode 053 最大子序和 python 分治+动态规划
- LeetCode52. 最大子序和(动态规划)
- LeetCode-初级=动态规划-最大子序和
- 算法设计与分析--求最大子段和问题(蛮力法、分治法、动态规划法) C++实现
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- Leetcode53.最大子序和(python3)
- 【LeetCode】120. Triangle 基于C++和Java的分析及解法,动态规划
- LeetCode题库解答与分析——#53.最大子序和MaximumSubarray
- leetcode 474. Ones and Zeroes若干0和1组成字符串最大数量+动态规划DP+背包问题
- leetcode之392. Is Subsequence(C++解法 动态规划 贪心 模式匹配)
- leetcode 221. Maximal Square 最大正方形面积 + 动态规划DP实现
- leetcode_121. Best Time to Buy and Sell Stock 求股票的最大收益 动态规划
- 算法设计与分析--求最大子段和问题(蛮力法、分治法、动态规划法) C++实现
- Leetcode(53) 最大子序和
- leetcode-最大子序和(动态规划讲解)
- 【LeetCode】Best Time to Buy and Sell Stock IV 动态规划dp解法(C++)
- Leetcode-120_Triangle(三角形)—动态规划解法+记忆化搜索解法-【C++】
- leetcode:654最大二叉树(C++)
- leetcode的python实现 刷题笔记53:最大子序和(多种解法)
- LeetCode53最大子序和