LeetCode 任意子数组和绝对值的最大值(JavaScript)
这道题目,我是通过看题解,然后通过自己思考才写出来的,第一次写博客,如果有不好之处,请谅解。
写这个题目之前,我们先了解一下前缀和,通过下面例子,或许你就明白了什么是前缀和了。
假设我们有一个数组 nums = [1,-3,2,3,-4];
那么preSum=[0,1,-2,0,3,-1].
也就是说 preSum = [0,1,1+(-3),1+(-3)+2,1+(-3)+2+3,1+(-3)+2+3+(-4)];
最简单粗暴的办法就是利用双层 for 循环,那么可能有人注意到了
preSum[i]=nums[i]+preSum[i-1] 这个关系
也有人发现了,preSum[0]这个数,为了方便,我们可以把它设置为0,这样就不会影响后面的数的和。我的做法是先把他设置为0,到后面运算完了之后,通过 shift 方法把它删除,这样就不会影响后面的题目了。所以preSum的长度我们可以先设置为 nums.length。
如果理解了,可以去做LeetCode上第1480这道题
如果这道题做对了,那么你就成功了一大半,可能我讲的也不是很清楚,实在不理解的,也可以看下我对这道题通过的代码,或许有些人和我一样,通过看代码更能理解明白一点。
下面的代码是 JavaScript 写的
var runningSum = function (nums) {let preSum = [0];preSum.push(nums[0]);for (let i = 1; i < nums.length; i++) {preSum.push(preSum[i] + nums[i]);}preSum.shift();return preSum;};
我们可以先求出 preSum 中的最大值,最小值。接着可以分三种情况就可以得到和的绝对值的最大值了。
下面是我手写的,字可能有点丑,请谅解:
当最大值和最小值异号的时候,我们可以通过 preSum 数组中的最大值 - preSum 数组中的最小值,通过上图可以看到 preSum 最大值是3,preSum 最小值是 -2 ,可以看出[2,3]子数组的和的绝对值是最大值。
当 preSum 的最大值 和 preSum 的最小值都为负号的时候,这时候子数组的和的绝对值的最大值就是 最小值的绝对值。
当 preSum 的最大值 和 preSum 的最小值都为正号的时候,这时候子数组的和的绝对值的最大值就是 最大值的绝对值。
下面是我通过这个题的代码:
var maxAbsoluteSum = function (nums) {let preSum = [0];preSum.push(nums[0]);for (let i = 1; i < nums.length; i++) {preSum.push(preSum[i] + nums[i]);}preSum.shift();let max = Math.max.apply(null, preSum);let min = Math.min.apply(null, preSum);let result = Math.max(Math.abs(max - min), Math.abs(max), Math.abs(min));return result;};
如果还有不懂的,可以评论区问我,我看到就会回的
LeetCode 任意子数组和绝对值的最大值(JavaScript)相关推荐
- LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums . 一个子数组 [numsl, numsl+1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(num ...
- LeetCode 2091. 从数组中移除最大值和最小值(一次遍历)
文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的数组 nums ,数组由若干 互不相同 的整数组成. nums 中有一个值最小的元素和一个值最大的元素.分别称为 最小值 和 最 ...
- 3、leetcode 697 数组的度
leetcode 697 数组的度 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最 ...
- LeetCode 845. 数组中的最长山脉(中心扩展)
1. 题目 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 ...
- angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据
[LeetCode] 442. 数组中重复的数据 题目链接: https://leetcode-cn.com/problems/find-all-duplicates-in-an-array 难度:中 ...
- 弟中弟的Leetcode总结——数组类(六)
弟中弟的Leetcode总结--数组类(六) 题目描述 3Sum Closest Given an array nums of n integers and an integer target, fi ...
- 弟中弟的Leetcode总结——数组类(七)
弟中弟的Leetcode总结--数组类(七) 题目描述 Maximum Subarray Given an integer array nums, find the contiguous subarr ...
- LeetCode 845. 数组中的最长山脉
https://leetcode-cn.com/problems/longest-mountain-in-array/ 难度:中等 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 &qu ...
- 数组子数组求最大值1
输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 实验思路: 从第一个元素开始循环,在嵌套另一个循环,从每个元素开始 ...
最新文章
- 关于PCA算法的一点学习总结
- java 存入对象io_Java面向对象 IO (一)
- Docker创建 tomcat/weblogic 集群
- 生日祝福(HTML+CSS+JavaScript+jQuery)
- 新闻标题 静态分页 (无刷新)
- 新mac 下第一次 安装 mongodb 步骤
- NOIP2000提高组复赛C 单词接龙
- NOI数学:Burmside引理与Polya原理
- 2天完成17TB数据量迁移,华为云数据库是如何做的?
- 海龟绘图两小时上手C语言 - 3 正方形螺旋线
- pd虚拟机 17+win10、11懒人镜像 Mac
- 链表的基本操作:创建、插入、删除操作对应c/c++代码
- 三方接口短信验证码怎么选择好的平台?
- 计算机怎么语音通话,微信电脑版怎么语音聊天?微信电脑版语音聊天教程
- 话说Ctrl键的终极含义
- simulink仿真结果出现振荡
- Java8新特性 方法引用(四)
- 什么?你居然不会微信分身
- 做了两年前端开发,平时就是拿 Vue 写写页面和组件,简历的项目经历应该怎么写得好看?
- 纪念我的第一个程序员节