力扣题目——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练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行 ...
最新文章
- awk脚本打印终端各种颜色的字体
- JFinal之学习资源
- android nfc peer to peer 实例,NFC Peer2Peer Mode - Android Beam - ISO 18092
- java8 :: 用法 (JDK8 双冒号用法)
- PAT 1074. Reversing Linked List (25)
- python泰坦尼克号数据预测_使用python预测泰坦尼克号生还
- 数据结构-链表1-顺序存储
- 2021消费者数智化运营白皮书
- centos-安装pycharm
- ffmpeg常用数据结构4
- Mxnet入门--第3篇
- qt html5播放器,Qt实现网络播放器
- python求15 17 23 65 97的因数_Python练习题
- 企业加速推进数字化转型,程序员进国企靠谱吗?
- L和S波段SAR信号穿透深度评估(Matlab代码实现)
- HTML5 JavaScript CSS 表单实现购物优惠打折
- 鹤岗市全国计算机等级考试,2020年3月黑龙江省鹤岗市计算机等级考试考务通知...
- 苹果内购中沙盒账号使用注意事项
- ccd视觉检测设备主要应用于哪些场景
- 直接高效:pycharm报错:cannot save setting :please specify a different sdk name
热门文章
- The Penn Discourse TreeBank 2.0
- VS2012下基于Glut OpenGL GL_POLYGON示例程序:
- 谈中国企业管理、中国企业管理软件为啥走错了道
- 提高计算机技能操作水平,计算机操作技能比赛方案
- python画笔的尺寸_Matplotlib 常用画图命令总结:使用 Python 在论文中画出一手漂亮的数据图...
- Shell脚本(函数,shell中的数组)
- Oracle 取某100天的每一天的日期
- iOS 开发常用链接总结
- 高性能 TCP amp; UDP 通信框架 HP-Socket v3.2.3 正式宣布
- 网络拓扑发现原理研究