注:本文的实现思路主要是基于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. 多个线程作用于同一个runnable对象
  2. linux下ARP防御
  3. lombok插件_lombok插件,让代码更简洁
  4. 初学者UI设计临摹素材模板,请先搞清楚这4个分类!
  5. AD教程系列 | 4 - 创建集成库文件
  6. 从零开始再造打爆李世石的AlphaGo:快速构建棋盘和围棋规则
  7. 一键修改Windows密码批处理
  8. 国网入职计算机考试题库,2019年国家电网入职考试题库.pdf
  9. 随手笔记Cookie
  10. java高清无损图片压缩
  11. 【日常分享】规格化成绩如何计算
  12. 迭代器的定义与自定义一个迭代器
  13. 销量持续5个月增长 岚图完成A轮50亿融资
  14. 教你挑选适合自己的蜂蜜
  15. HTML 通过GIF实现loading动画(非进度条版)。
  16. Coursera | Grammer and Punctuation(UCI) | Quiz
  17. JS贪心算法,含图解
  18. Vue使用Echarts实现广西地图(旧版)
  19. java 车牌模糊_sqlserver 车牌识别车牌号模糊匹配数
  20. 20230117/18

热门文章

  1. oracle not aviable,ORA-01034: ORACLE not available
  2. css颜色渐变 移动,CSS颜色渐变
  3. R语言ggplot2包之画折线图
  4. 用GDB调试PHP扩展
  5. Eclipse用法和技巧四:生成说明文档1
  6. python中组合框_Tkinter Python中的多个组合框
  7. oc代码混淆_OC代码混淆工具
  8. 在PaaS上构建SaaS应用程序需要注意什么
  9. 掰一掰GitHub上优秀的大数据项目
  10. 深入理解Flex布局以及计算