【算法题】1749. 任意子数组和的绝对值的最大值(LeetCode)

news/2025/2/21 16:58:38/

算法题】1749. 任意子数组和的绝对值的最大值(LeetCode)

1.题目

下方是力扣官方题目的地址

1749. 任意子数组和的绝对值的最大值

给你一个整数数组 nums 。一个子数组 [numsl, numsl+1, ..., numsr-1, numsr]和的绝对值abs(numsl + numsl+1 + ... + numsr-1 + numsr)

请你找出 nums和的绝对值 最大的任意子数组(可能为空),并返回该 最大值

abs(x) 定义如下:

  • 如果 x 是负整数,那么 abs(x) = -x
  • 如果 x 是非负整数,那么 abs(x) = x

示例 1:

输入:nums = [1,-3,2,3,-4]
输出:5
解释:子数组 [2,3] 和的绝对值最大,为 abs(2+3) = abs(5) = 5 。

示例 2:

输入:nums = [2,-5,1,-4,3,-2]
输出:8
解释:子数组 [-5,1,-4] 和的绝对值最大,为 abs(-5+1-4) = abs(-8) = 8 。

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

2.题解

思路

它要求我们求绝对值的最大值,我们可以直接求出两个最值:最大值和最小值,然后将它们的绝对值做作比较,取最大。

那么如何求一个数组的子数组和的最大值或最小值呢?

我们可以用动态规划的方法

我们以求最大值为例,最小值就将max改成min就行

我们定义dp[i]为以i为结尾的子数组的最大值

这就有了两种情况:

第一种:只有nums[i]这一个数构成的子数组

第二种:继承dp[i-1]的子数组并加上nums[i]

哪个情况大选哪一种

所以代码就是:

python">nums = [1,-3,2,3,-4]
dp=[0]*len(nums)
dp[0]=nums[0]
for i in range(1,len(nums)):dp[i]=max(nums[i],dp[i-1]+nums[i])
print(dp)
# 输出: [1, -2, 2, 5, 1]

然后将求最小值的结合起来,将二者的绝对值作比较就最大就行了

Python代码

python">class Solution(object):def maxAbsoluteSum(self, nums):""":type nums: List[int]:rtype: int"""dp1=[0]*len(nums)dp1[0]=nums[0]dp2=[0]*len(nums)dp2[0]=nums[0]for i in range(1,len(nums)):dp1[i]=min(nums[i],dp1[i-1]+nums[i])  dp2[i]=max(nums[i],dp2[i-1]+nums[i])return max(abs(max(dp2)),abs(min(dp1)))

3.结语

本人资历尚浅,发博客主要是记录与学习,欢迎大佬们批评指教!大家也可以在评论区多多交流,相互学习,共同成长。


http://www.ppmy.cn/news/1573932.html

相关文章

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十五)-股票买卖、货仓选址、等差数列、鸣人的影分身

前言 在这篇博客中&#xff0c;我们将深入探讨几种经典的算法问题&#xff0c;并提供相应的求解方法。我们将首先学习如何通过贪心算法来解决股票买卖和货仓选址问题。接着&#xff0c;我们会通过最大公约数来探讨等差数列的求解方法。最后&#xff0c;我们会利用动态规划来解…

线程池工具类:简化并发编程,提升任务执行效率

文章目录 线程池工具类&#xff1a;简化并发编程&#xff0c;提升任务执行效率线程池工具类的设计目标线程池工具类的实现工具类的使用示例1. 提交任务2. 监控线程池状态3. 关闭线程池 工具类的核心功能总结 线程池工具类&#xff1a;简化并发编程&#xff0c;提升任务执行效率…

基于腾讯云大模型知识引擎×DeepSeek构建八字、六爻赛博算卦娱乐应用

引言 随着DeepSeek的火爆&#xff0c;其强大的思维链让不少人越用越香&#xff0c;由于其缜密的思维和推理能力&#xff0c;不少人开发出了不少花里胡哨的玩法&#xff0c;其中一种就是以八字、六爻为代表的玄学文化正以“赛博玄学”的新形态席卷年轻群体。 针对于八字、六爻…

QT事件循环

文章目录 主事件循环事件循环事件调度器事件处理投递事件发送事件 事件循环的嵌套线程的事件循环deleteLater与事件循环QEventLoop类QEventLoop应用等待一段时间同步操作模拟模态对话框 参考 本文主要对QT中的事件循环做简单介绍和使用 Qt作为一个跨平台的UI框架&#xff0c;其…

Python安装与环境配置全程详细教学(包含Windows版和Mac版)

Windows版 Python的安装与环境配置 1.下载Python Python下载地址&#xff1a;Download Python | Python.org 可以在这里直接点击下载&#xff0c;就会下载你电脑对应的最新版本 如果你要是不想下载对应的最新版或者因为某些原因你想安装某一特定版本的Python你可以在上面的…

arm环境下,wpa_supplicant交叉编译+wifi sta连接详解

1、前言 wpa_supplicant 是一个用于 WiFi 客户端的加密认证工具&#xff0c;支持 WEP、WPA、WPA2 等多种加密方式。它通常与 wpa_cli 配合使用&#xff0c;用于管理 WiFi 连接。本文讲解wpa_supplicant 交叉编译全过程以及开发板使用wpa_supplican和udhcpc连接wifi全过程详解。…

第十二届先进制造技术与材料工程国际学术会议 (AMTME 2025)

重要信息 大会官网&#xff1a;www.amtme.org&#xff08;了解会议&#xff0c;投稿等&#xff09; 大会时间&#xff1a;2025年3月21-23日 大会地点&#xff1a;中国-广州 简介 2025年第十二届先进制造技术与材料工程 (AMTME 2025) 定于2025年3月21-23日在中国广州隆重举…

Rust编程语言入门教程(五)猜数游戏:生成、比较神秘数字并进行多次猜测

Rust 系列 &#x1f380;Rust编程语言入门教程&#xff08;一&#xff09;安装Rust&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;二&#xff09;hello_world&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;三&#xff09; Hello Cargo&#x1f…