注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数

题目描述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。


输入示例

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
输入:nums = [1]
输出:1
输入:nums = [0]
输出:0

解题思路

1、贪心算法

若当前元素之前的和小于0,则丢弃当前元素之前的数列。 很容易相当,如果之前数列的和为负数,再加上当前元素的值,肯定小于当前元素自身的值,此时就需要重新以当前元素为子序列的起始元素。

以数组 nums=[−2,1,−3,4,−1,2,1,−5,4]nums = [-2,1,-3,4,-1,2,1,-5,4]nums=[−2,1,−3,4,−1,2,1,−5,4] 举例。下面的表格表述了贪心算法的执行过程,第二列表示当前元素之前的子序列之和,其值与上一行的当前子序列的和是同一个值。第三列的值为第一列的值和第二列的值之和。第四列监视第三列中曾经出现的最大和。

当前元素值 之前的子序列的和 当前子序列的和 最大和
- 2 0 -2 - 2
1 -2 1 1
-3 1 -2 1
4 -2 4 -4
- 1 4 3 4
2 3 5 5
1 5 6 6
- 5 6 1 6
4 1 5 6

以下是代码实现部分,思路在代码中的注释部分体现

var maxSubArray = function(nums) {let preSum = 0 // 初始化之前的子序列的和let result = nums[0] // 初始化最大和for(let item of nums){ // 遍历 nums 数组// 如果之前的子序列的和小于0,则将当前子序列的和设置为当前元素if (preSum < 0) // 这里的 preSum 指的是之前的子序列的和preSum = item // 这里的 preSum 指的是当前子序列的和// 如果之前的子序列的和大于等于0,则将当前子序列的和设置为当前元素与之前子序列的和相加的数值elsepreSum += item// 监视最大和result = Math.max(result, preSum)}return result
};

力扣题目——53. 最大子序和相关推荐

  1. 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划

    文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...

  2. 贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和

    贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和 一.455.分发饼干 题目连接:455. 分发饼干 - 力扣(LeetCode) 思路1:用贪心思想,将饼干数组和胃口数组先排序,然后 ...

  3. leetcode - 53. 最大子序和 152. 乘积最大子序列 - 两个算法之间的联系和区别

    这两道算法题的解题思路是差不多的,但是从整体上分析,乘积最大子序列之和是最大子序和的进阶.先来看看两道算法题的简单描述. 53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组 ...

  4. leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法

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

  5. 20210530:力扣第53场双周赛题解

    力扣第53场双周赛题解 题目 思路与算法 代码实现 写在最后 题目 长度为三且各字符不同的子字符串 数组中最大数对和的最小值 矩阵中最大的三个菱形和 思路与算法 长度为三且各字符不同的子字符串:遍历查 ...

  6. leetcode - 53. 最大子序和

    53. 最大子序和 - 动态规划 -------------------------------------- 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素), ...

  7. 力扣题目——429. N 叉树的层序遍历

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个 N 叉树,返回其节点值的层序遍历.(即从左到右,逐层遍历). 树的 ...

  8. 力扣题目——637. 二叉树的层平均值

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例: 输入: ...

  9. 力扣题目——103. 二叉树的锯齿形层序遍历

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行 ...

最新文章

  1. awk脚本打印终端各种颜色的字体
  2. JFinal之学习资源
  3. android nfc peer to peer 实例,NFC Peer2Peer Mode - Android Beam - ISO 18092
  4. java8 :: 用法 (JDK8 双冒号用法)
  5. PAT 1074. Reversing Linked List (25)
  6. python泰坦尼克号数据预测_使用python预测泰坦尼克号生还
  7. 数据结构-链表1-顺序存储
  8. 2021消费者数智化运营白皮书
  9. centos-安装pycharm
  10. ffmpeg常用数据结构4
  11. Mxnet入门--第3篇
  12. qt html5播放器,Qt实现网络播放器
  13. python求15 17 23 65 97的因数_Python练习题
  14. 企业加速推进数字化转型,程序员进国企靠谱吗?
  15. L和S波段SAR信号穿透深度评估(Matlab代码实现)
  16. HTML5 JavaScript CSS 表单实现购物优惠打折
  17. 鹤岗市全国计算机等级考试,2020年3月黑龙江省鹤岗市计算机等级考试考务通知...
  18. 苹果内购中沙盒账号使用注意事项
  19. ccd视觉检测设备主要应用于哪些场景
  20. 直接高效:pycharm报错:cannot save setting :please specify a different sdk name

热门文章

  1. The Penn Discourse TreeBank 2.0
  2. VS2012下基于Glut OpenGL GL_POLYGON示例程序:
  3. 谈中国企业管理、中国企业管理软件为啥走错了道
  4. 提高计算机技能操作水平,计算机操作技能比赛方案
  5. python画笔的尺寸_Matplotlib 常用画图命令总结:使用 Python 在论文中画出一手漂亮的数据图...
  6. Shell脚本(函数,shell中的数组)
  7. Oracle 取某100天的每一天的日期
  8. iOS 开发常用链接总结
  9. 高性能 TCP amp; UDP 通信框架 HP-Socket v3.2.3 正式宣布
  10. 网络拓扑发现原理研究