【leetcode】53. Maximum Subarray
来源:互联网 发布:社交网络中文 编辑:程序博客网 时间:2024/06/11 02:36
题目
Find the contiguous subarray within an array (containing at least one number) 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.
分析+源码
1.遍历得到所有可能的字符串,去结果最好的解,这是最简单的方案,但是比较耗时间。
js
2.类似于dp动态规划来解,知道前K个元素的最大子序列和最大值(已经记录的),以及一个临时的sum.添加k+1这个元素,由于连续子序列这个限制,如果k+1这个元素之前的和小于0,则增加k+1这个元素从而去组成最大子序列没有意义,所以直接可以sum=0。注意一点,只要sum不减到负数,中间出现小于0的元素是没关系的,sum仍然可以继续累加。
/** * @param {number[]} nums * @return {number} */var maxSubArray = function(nums) { var sum=maxSum=nums[0]; for(var i=1;i<nums.length;i++){ if(sum<0){ sum=0; } sum+=nums[i]; maxSum=Math.max(maxSum,sum); } return maxSum; }
3.思路是【考虑只有子序列的前半部分的和为正数时,子数组的求和才可能最大。】这样遍历一次数组即可。从头开始遍历的元素求和为正,继续向后,求和为负,重新求和,子数组的开始设置为下一个元素。 当数组前面的几个元素加起来mark<0后,把mark重新赋值,置下一个元素,mark=nums[i].当mark>result,更新result=mark,当mark
/** * @param {number[]} nums * @return {number} */var maxSubArray = function(nums) { if(nums.length>0){ var result=nums[0]; var mark=0; }else{ return -Infinity; } for(var i=0;i<nums.length;i++){ if(mark>=0){ mark+=nums[i]; }else{ mark=nums[i]; } if(mark>result){ result=mark; } } return result; }
0 0
- [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
- 53. Maximum Subarray LeetCode
- [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
- 排序方法总结(从小到大)
- Java-String之寻根问底
- 数据结构 - 树Tree
- MySQL传智播客--Lession4-Lession12笔记
- Sitemesh 3 的使用及配置
- 【leetcode】53. Maximum Subarray
- hdu 3622 Bomb Game【2-SAT-------Tarjan强连通】
- C语言基础知识总结
- 自定义的弹出浮动框-自动消失
- c++并发编程小记1
- 自定义view与自定义drawable在设置图像中的使用
- 学习jsp01
- 【J2SE】IntelliJ IDEA中Lambda表达式警告:Can be replaced with method reference less
- C语言错题集