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 解释: ...
随机推荐
- IT兄弟连 JavaWeb教程 过滤器1
Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭.创建过滤器和监听器需要继承相应接口,并对其进行配置. ...
- pytest框架(一)
代码示例一 # coding=utf-8 def func(x): return x + 1 def test_answer(): assert func(3) == 5 运行结果 E:\pyYouY ...
- Django之缓存+序列化+信号+ORM性能优化+验证码
缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加 明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcach ...
- 题解 P1006 传纸条
传送门 其实我觉得这个跟P1004挺类似(又是动规) 题解P1004 #include<iostream> #include<cstdio> #include<cstri ...
- Codeforces Round #562 (Div. 2) C. Increasing by Modulo
链接:https://codeforces.com/contest/1169/problem/C 题意: Toad Zitz has an array of integers, each intege ...
- Codeforces #564div2 E1(记忆化搜索)
虽然不是正解但毕竟自己做出来了还是记下来吧- 对每个人分别dfs得到其期望,某两维的组合情况有限所以Hash一下避免了MLE. #include <cstdio> #include < ...
- CodeForces - 508B-Anton and currency you all know
Berland, 2016. The exchange rate of currency you all know against the burle has increased so much th ...
- bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流
思路比较显然:二分答案,流流流 但是实现的时候感觉自己数学捉急.. 一开始算了个直线到点距离.... 应该是线段到点距离 #include <bits/stdc++.h> #define ...
- 前端CSS(3)
前端基础CSS(3) 一.文本属性和字体属性(常用的) 1.文本属性 text-align:left|right|center|justify(两端对齐,只适用于英文); /*对齐方式*/ c ...
- spark RPC详解
前段时间看spark,看着迷迷糊糊的.最近终于有点头绪,先梳理了一下spark rpc相关的东西,先记录下来. 1,概述 个人认为,如果把分布式系统(HDFS, HBASE,SPARK等)比作一个人, ...