LeetCode WIith JS || 53. Maximum Subarray[寻求最大连续序列]
来源:互联网 发布:修改数据库创建时间 编辑:程序博客网 时间:2024/06/05 23:04
题目描述:
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.
大白话:
一个数组里面数据有正有负,求连续的几个数加起来是数组中能找到的最大的和。返回最大和;
原题目链接: 53. Maximum Subarray
思路:
以数组[-2,1,-3,4,2,1,-5,4]来模拟下“计算机”的思考方式[有逻辑性的,非一眼看出的那种思维方式]。
首先从-2开始往右走,-2+1=-1>-2,因此1收入囊中,而此时是否应该继续下去判断第三位了呢,我们看下前两位的取舍是否是最优解。-2,1很明显最优解是只选择1,加了-2之后还使得1的身价下跌得不偿失。接下来看第三位-3,1-3=-2<1,那么我们是否就应该放弃-3连同放弃1从第4位开始了呢,no。我们不能为了眼前的一点小泥泞就放弃第3位之后的未知的大片森林,这和我们之前选择接纳1而放弃-2是不一样的,-2.1是我们当前拥有的已知道的资源,在现有资源里寻求最佳解是明哲保身的做法。好了这段讲的太哲学了些。
归纳下:当我们从左边往右筛选时,只有当当前元素大于现有累加和[已知资源]时,如[-2,1]中1>-2+1,我们就抛弃现有的资源,直接让当前元素登基上位;除此以外的任何情况我们都不能抛弃当前元素,因为当前元素背后都有无法预知的宝藏。当然也不能轻易抛弃之前的元素,除非你确定你抛弃最佳选择,不然会面临捡了西瓜丢了芝麻的囧尬局面。
这个题,让我想到了柏拉图麦穗的故事,苏格拉底带徒弟们来到一片麦田,让他们在麦田行进过程中,每人选择一支最大的麦穗,不能走回头路,且只能摘一支。很多人因为不确定哪颗最大等走到尽头时反而什么也没摘得。
其实同样的道理,我们只需要保证当前摘得的比上一个大就好辣~@_@~
好了代码实现如下:
AC代码
var maxSubArray = function(nums) { if(nums.length==0) return 0; var maxSum = nums[0],curSum = nums[0]; for(var i=1;i<nums.length;i++){ if(nums[i]>curSum+nums[i]){ curSum = nums[i]; }else{ curSum += nums[i]; } if(curSum>maxSum){ maxSum = curSum; } } return maxSum;};console.log(maxSubArray([-2,1,-3,4,-1,2,1,-5,4]));
后记:
虽然题目简单,但是蕴藏深刻的人生哲理的样子 [滑稽逃]
- LeetCode WIith JS || 53. Maximum Subarray[寻求最大连续序列]
- 【LeetCode】53.Maximum Subarray最大连续子序列和
- 【LeetCode】Maximum Subarray (最大连续子序列和)
- leetcode | Maximum Subarray 最大连续子序列的和
- Leetcode#53. Maximum Subarray(连续子序列的最大和)
- 53. Maximum Subarray 连续子序列的最大和
- LeetCode OJ-53.Maximum Subarray(最大连续子数组和)
- LeetCode 53. Maximum Subarray--连续子数组的最大和
- ※ Leetcode - Dynamic Programming - 53.Maximum Subarray(最大连续和)+152.Maximum Product Subarray(最大连续积)
- 【LeetCode】 53. Maximum Subarray 最大子序列和
- leetcode Maximum Subarray 最大子序列
- LeetCode--Maximum Subarray 最大连续子序列和 (动态规划)
- Maximum Subarray连续子序列最大和 -- LeetCode(经典动态规划)
- Maximum Subarray 动态规划 最大连续子序列和
- Maximum Subarray 最大子数组和(连续)@LeetCode
- LeetCode | Maximum Subarray(连续最大子数组)
- leetcode-53 Maximum Subarray 连续子数组的最大和
- [LeetCode] Maximum Subarray 求连续子数组的最大和
- Java 多线程
- Ajax跨域请求解决方案——jsonp
- jvm
- 插件化方案-比较滴滴VirtualApk和360DroidPlugin
- Linux Shell基础
- LeetCode WIith JS || 53. Maximum Subarray[寻求最大连续序列]
- [自用门户]jeecms中搜索功能的代码片段_含单独搜索本栏目id的功能
- Maven笔记
- 新 建 Maven Project
- Android 中 Application,Task和Process 关系
- 设计模式之MVC模式
- RDLC——画图表
- matplotlib与pyecharts:词云可视化
- 标签marquee实现滚动效果