力扣题目——53. 最大子序和
注:本文的实现思路主要是基于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. 最大子序和相关推荐
- 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划
文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...
- 贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和
贪心1|455.分发饼干|376. 摆动序列|53. 最大子序和 一.455.分发饼干 题目连接:455. 分发饼干 - 力扣(LeetCode) 思路1:用贪心思想,将饼干数组和胃口数组先排序,然后 ...
- leetcode - 53. 最大子序和 152. 乘积最大子序列 - 两个算法之间的联系和区别
这两道算法题的解题思路是差不多的,但是从整体上分析,乘积最大子序列之和是最大子序和的进阶.先来看看两道算法题的简单描述. 53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组 ...
- leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法
题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子 ...
- 20210530:力扣第53场双周赛题解
力扣第53场双周赛题解 题目 思路与算法 代码实现 写在最后 题目 长度为三且各字符不同的子字符串 数组中最大数对和的最小值 矩阵中最大的三个菱形和 思路与算法 长度为三且各字符不同的子字符串:遍历查 ...
- leetcode - 53. 最大子序和
53. 最大子序和 - 动态规划 -------------------------------------- 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素), ...
- 力扣题目——429. N 叉树的层序遍历
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个 N 叉树,返回其节点值的层序遍历.(即从左到右,逐层遍历). 树的 ...
- 力扣题目——637. 二叉树的层平均值
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例: 输入: ...
- 力扣题目——103. 二叉树的锯齿形层序遍历
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行 ...
最新文章
- 多个线程作用于同一个runnable对象
- linux下ARP防御
- lombok插件_lombok插件,让代码更简洁
- 初学者UI设计临摹素材模板,请先搞清楚这4个分类!
- AD教程系列 | 4 - 创建集成库文件
- 从零开始再造打爆李世石的AlphaGo:快速构建棋盘和围棋规则
- 一键修改Windows密码批处理
- 国网入职计算机考试题库,2019年国家电网入职考试题库.pdf
- 随手笔记Cookie
- java高清无损图片压缩
- 【日常分享】规格化成绩如何计算
- 迭代器的定义与自定义一个迭代器
- 销量持续5个月增长 岚图完成A轮50亿融资
- 教你挑选适合自己的蜂蜜
- HTML 通过GIF实现loading动画(非进度条版)。
- Coursera | Grammer and Punctuation(UCI) | Quiz
- JS贪心算法,含图解
- Vue使用Echarts实现广西地图(旧版)
- java 车牌模糊_sqlserver 车牌识别车牌号模糊匹配数
- 20230117/18