LeetCode 53题 最大子序和 -- JavaScript
解题思路分析:
该题是在一个整数数组中找到一个和最大的连续子数组,并返回和值。那么如何找到一个和最大的连续子数组呢?我们知道,这肯定需要遍历数组才行;好,那我们就开始遍历数组。首先,我们初始化最大和 sum 和当前和 currSum,对于 currSum,如果它小于0,我们就将数组中下一值赋给它;否则就将数组中下一值与其相加。然后,我们取当前 sum 和 currSum 的最大值即可。
代码实现:
var maxSubArray = function(nums) {
//首先判断nums是否非空
if(nums){
//初始化最大和sum、当前和currSum
var sum = nums[0];
var currSum = nums[0];
for (var i = 1; i < nums.length; i++) {
//取得当前和currSum
currSum = currSum < 0 ? nums[i] : currSum + nums[i];
//取得最大和sum
sum = Math.max(currSum,sum)
}
return sum;
}
};
执行步骤分析:
我们以输入数组 nums = [-2,1,-3,4,-1,2,1,-5,4] 为例,分析一下执行流程:
初始化:currSum = -2,sum = -2,
nums[1]:因为 currSum = -2 < 0,故 currSum = nums[1] = 1;sum = Math.max(1,-2) = 1,
nums[2]:因为 currSum = 1 > 0,故 currSum = currSum + nums[2] = -2;sum = Math.max(-2,1) = 1,
nums[3]:因为 currSum = -2 < 0,故 currSum = nums[3] = 4;sum = Math.max(4,1) = 4,
nums[4]:因为 currSum = 4 > 0,故 currSum = currSum + nums[4] = 3;sum = Math.max(3,4) = 4,
nums[5]:因为 currSum = 3 > 0,故 currSum = currSum + nums[5] = 5;sum = Math.max(5,4) = 5,
nums[6]:因为 currSum = 5 > 0,故 currSum = currSum + nums[6] = 6;sum = Math.max(6,5) = 6,
nums[7]:因为 currSum = 6 > 0,故 currSum = currSum + nums[7] = 1;sum = Math.max(1,6) = 6,
nums[8]:因为 currSum = 1 > 0,故 currSum = currSum + nums[8] = 5;sum = Math.max(5,6) = 6,
循环结束,最终返回 sum = 6
通过以上执行流程的分析,应该比较清晰了。一句话概括,我们利用 currSum 是为了保证子数组连续,而sum 中保存的值,就是最大连续子数组的和。
该算法的时间复杂度为:O(n)
该算法的空间复杂度为:O(1)
LeetCode 53题 最大子序和 -- JavaScript的更多相关文章
- Leetcode(53)-最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...
- 【leetcode 简单】第十三题 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...
- Leetcode#53.Maximum Subarray(最大子序和)
题目描述 给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大. 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4], 连续子序列 [4,-1,2,1] ...
- LeetCode 53. 最大子序和(Maximum Subarray)
53. 最大子序和 53. Maximum Subarray 题目描述 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. LeetCode53. M ...
- Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray)
Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. ...
- Java实现 LeetCode 53 最大子序和
53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 ...
- leetcode 120. 三角形最小路径和 及 53. 最大子序和
三角形最小路径和 问题描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...
- Leetcode——53.最大子序和
@author: ZZQ @software: PyCharm @file: leetcode53_最大子序和.py @time: 2018/11/26 12:39 要求:给定一个整数数组 nums ...
- 【LeetCode】53.最大子序和
最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: ...
随机推荐
- girdspec实现画布
对于简单的画布可以很轻松的使用subplot解决,可是对于一些复杂的画布比如下面的这个 就不易使用subplot解决,这是就需要subplot的扩展版gridspec 构造函数GridSpec(nro ...
- ZOJ2868【折半】
题意: 把一堆数分成两堆,使得两堆的差值最小. 思路: 先把一堆数分成两堆,然后用个set存一堆的所有组合,枚举第一堆的状态,二分查找第二堆接近half_value. 瞎说时间复杂度:O(2^17*3 ...
- 【Unity】物理碰撞实验
http://www.cnblogs.com/javawebsoa/archive/2013/05/18/3085818.html 这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就 ...
- 洛谷P1011 车站
P1011 车站 题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为 ...
- openinstall渠道统计工具介绍
大家好,今天给大家介绍一下如何使用openinstall 来实现APP 渠道统计,做运营推广的朋友应该对渠道统计并不陌生,之前一般都是让技术的同事打渠道包方式进行渠道统计,而且只有安卓才能打渠道包.o ...
- IT兄弟连 JavaWeb教程 使用Servlet实现在页面中显示随机数
在com.xdl.servlet包下定义RandomServlet类并HttpServlet类,在该类中生成随机数并发送给客户端.RandomServlet类详细代码如下: package com.x ...
- IT兄弟连 JavaWeb教程 JSON和JSON字符串
JSON (JavaScript Object Notation)是JavaScript语言中的一种对象类型.JSON的好处是易于阅读和解析.当客户端和服务器端需要交互大量数据时,使用JSON格式传输 ...
- IT兄弟连 JavaWeb教程 监听器2
4 监听HttpSession域对象的创建和销毁 HttpSessionListener接口用于监听HttpSession对象的创建和销毁. 创建一个Session时,激发sessionCreate ...
- docker 使用数据库mysql
1. docker pull mysql 获取mysql镜像 2. docker images 查看镜像列表 3. docker run -itd -P mysql bash :启动mysql镜像 ...
- NET Core 2.0 自定义
ASP.NET Core 2.0 自定义 _ViewStart 和 _ViewImports 的目录位置 在 ASP.NET Core 里扩展 Razor 查找视图目录不是什么新鲜和困难的事情,但 _ ...