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

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

相关推荐
liulilittle20 分钟前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
土司大王1 小时前
LeetCode hot100——相交链表
算法·leetcode·链表
土司大王1 小时前
LeetCode hot100——回文链表
算法·leetcode·链表
sel_91 小时前
【Docker】Docker 安装与使用详解:从零搭建到日常实战
人工智能·深度学习·算法·docker
小O的算法实验室10 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
Tbisnic11 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx11 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归12 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing12 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习13 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展