解题思路分析:

该题是在一个整数数组中找到一个和最大的连续子数组,并返回和值。那么如何找到一个和最大的连续子数组呢?我们知道,这肯定需要遍历数组才行;好,那我们就开始遍历数组。首先,我们初始化最大和 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的更多相关文章

  1. Leetcode(53)-最大子序和

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...

  2. 【leetcode 简单】第十三题 最大子序和

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...

  3. Leetcode#53.Maximum Subarray(最大子序和)

    题目描述 给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大. 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4], 连续子序列 [4,-1,2,1] ...

  4. LeetCode 53. 最大子序和(Maximum Subarray)

    53. 最大子序和 53. Maximum Subarray 题目描述 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. LeetCode53. M ...

  5. Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray)

    Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. ...

  6. Java实现 LeetCode 53 最大子序和

    53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 ...

  7. leetcode 120. 三角形最小路径和 及 53. 最大子序和

    三角形最小路径和 问题描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...

  8. Leetcode——53.最大子序和

    @author: ZZQ @software: PyCharm @file: leetcode53_最大子序和.py @time: 2018/11/26 12:39 要求:给定一个整数数组 nums ...

  9. 【LeetCode】53.最大子序和

    最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: ...

随机推荐

  1. —Libre#2009. 「SCOI2015」小凸玩密室

    #2009. 「SCOI2015」小凸玩密室 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  2. 云服务器、虚拟主机和VPS的区别

    虚拟主机就是利用网络空间技术,把一台服务器分成许多的"虚拟"的主机,每一台网络空间都具有独立的域名和IP地址,具有完整的Internet服务器功能.网络空间之间完全独立,在外界看来 ...

  3. 阿里云ECS测试服务器部署

    前序:为了提供一个干净的测试环境,更好地验证产品问题,也为了防止被开发人员频繁发布代码而打断测试工作,故测试团队搭建了一台阿里云ECS服务器,以下是具体的部署信息: 1. 安装JDK Java版本:J ...

  4. 深入V8引擎-Time模块介绍

    积跬步,行千里,先从最简单的开始写. 这一篇介绍V8中的时间模块,与libuv粗糙的update_loop_time方法不同,V8有一套独立完整的类负责管理时间. 该类位于src/base/platf ...

  5. webpack4.0介绍与使用(一)

    1:webpack的基本使用: ##在网页中会引用那些静态资源: js, css, images, 字体文件和模板文件(.vue)等 ##网页总引用静态资源多了以后会有那些问题: 网页加载速度慢,因为 ...

  6. 利用system.reflection遍历一个类的变量成员

    假设有下面一个类,在程序中已初始化,如何获取里面的变量成员name,age,onduty及其值呢? public class Employee { public string name; public ...

  7. C 语言实例 - 循环输出26个字母

    C 语言实例 - 循环输出26个字母 循环输出 个字母. 实例 #include <stdio.h> int main() { char c; for(c = 'A'; c <= ' ...

  8. centOS7.5上部署server jre1.8.0_192 tomcat-8.5.35 mysql-8.0.13

  9. JS高级学习历程-4

    4 执行环境可以访问什么变量 具体可以访问变量类型:局部变量.参数.函数.外部环境变量 优先级:局部变量 > 函数 > 参数 > 外部环境变量 <!DOCTYPE html&g ...

  10. JavaScript 与 CSS 滚动实现最新指南

    一些(网站)滚动的效果是如此令人着迷但你却不知该如何实现,本文将为你揭开它们的神秘面纱.我们将基于最新的技术与规范为你介绍最新的 JavaScript 与 CSS 特性,(当你付诸实践时)将使你的页面 ...