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

【算法题】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.结语

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

相关推荐
AI软著研究员5 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish6 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱7 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法