这道题目,我是通过看题解,然后通过自己思考才写出来的,第一次写博客,如果有不好之处,请谅解。

写这个题目之前,我们先了解一下前缀和,通过下面例子,或许你就明白了什么是前缀和了。

假设我们有一个数组 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)相关推荐

  1. LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums . 一个子数组 [numsl, numsl+1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(num ...

  2. LeetCode 2091. 从数组中移除最大值和最小值(一次遍历)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的数组 nums ,数组由若干 互不相同 的整数组成. nums 中有一个值最小的元素和一个值最大的元素.分别称为 最小值 和 最 ...

  3. 3、leetcode 697 数组的度

    leetcode 697 数组的度 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最 ...

  4. LeetCode 845. 数组中的最长山脉(中心扩展)

    1. 题目 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 "山脉": B.length >= 3 存在 0 < i < B.length - 1 使得 ...

  5. angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据

    [LeetCode] 442. 数组中重复的数据 题目链接: https://leetcode-cn.com/problems/find-all-duplicates-in-an-array 难度:中 ...

  6. 弟中弟的Leetcode总结——数组类(六)

    弟中弟的Leetcode总结--数组类(六) 题目描述 3Sum Closest Given an array nums of n integers and an integer target, fi ...

  7. 弟中弟的Leetcode总结——数组类(七)

    弟中弟的Leetcode总结--数组类(七) 题目描述 Maximum Subarray Given an integer array nums, find the contiguous subarr ...

  8. LeetCode 845. 数组中的最长山脉

    https://leetcode-cn.com/problems/longest-mountain-in-array/ 难度:中等   我们把数组 A 中符合下列属性的任意连续子数组 B 称为 &qu ...

  9. 数组子数组求最大值1

    输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 实验思路: 从第一个元素开始循环,在嵌套另一个循环,从每个元素开始 ...

最新文章

  1. 关于PCA算法的一点学习总结
  2. java 存入对象io_Java面向对象 IO (一)
  3. Docker创建 tomcat/weblogic 集群
  4. 生日祝福(HTML+CSS+JavaScript+jQuery)
  5. 新闻标题 静态分页 (无刷新)
  6. 新mac 下第一次 安装 mongodb 步骤
  7. NOIP2000提高组复赛C 单词接龙
  8. NOI数学:Burmside引理与Polya原理
  9. 2天完成17TB数据量迁移,华为云数据库是如何做的?
  10. 海龟绘图两小时上手C语言 - 3 正方形螺旋线
  11. pd虚拟机 17+win10、11懒人镜像 Mac
  12. 链表的基本操作:创建、插入、删除操作对应c/c++代码
  13. 三方接口短信验证码怎么选择好的平台?
  14. 计算机怎么语音通话,微信电脑版怎么语音聊天?微信电脑版语音聊天教程
  15. 话说Ctrl键的终极含义
  16. simulink仿真结果出现振荡
  17. Java8新特性 方法引用(四)
  18. 什么?你居然不会微信分身
  19. 做了两年前端开发,平时就是拿 Vue 写写页面和组件,简历的项目经历应该怎么写得好看?
  20. 纪念我的第一个程序员节

热门文章

  1. 工人物语5战役攻略_工人物语5-全攻略(下篇)
  2. 比尔·盖茨是奸商吗?
  3. 基于SSM社区养老院管理系统
  4. 目前微型计算机电子元件,目前微机中所广泛采用的电子元件是(.doc
  5. 【全国省市县数据】JAVA导入到树结构表
  6. 数据挖掘复习(包括一些课本习题)
  7. 科技创业公司最爱的9大工具箱
  8. 清热祛湿,清肝润肺——五指毛桃龙骨汤了解一下
  9. 比较版本号:给你两个版本号 version1 和 version2 ,请你比较它们。
  10. 安卓(Android)开发百度语音唤醒(识别)