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

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

相关推荐
做科研的周师兄8 小时前
【机器学习入门】7.4 随机森林:一文吃透随机森林——从原理到核心特点
人工智能·学习·算法·随机森林·机器学习·支持向量机·数据挖掘
Sunsets_Red8 小时前
差分操作正确性证明
java·c语言·c++·python·算法·c#
【杨(_> <_)】9 小时前
SAR信号处理重要工具-傅里叶变换(二)
算法·信号处理·傅里叶分析·菲涅尔函数
怎么没有名字注册了啊9 小时前
爬动的蠕虫
算法
取酒鱼食--【余九】9 小时前
机器人学基础(一)【坐标系和位姿变换】
笔记·算法·机器人·开源·机器人运动学·机器人学基础
晨非辰9 小时前
【面试高频数据结构(四)】--《从单链到双链的进阶,读懂“双向奔赴”的算法之美与效率权衡》
java·数据结构·c++·人工智能·算法·机器学习·面试
im_AMBER9 小时前
数据结构 03 栈和队列
数据结构·学习·算法
凸头9 小时前
以AtomicInteger为例的Atomic 类的底层CAS细节理解
java·jvm·算法
前端小刘哥10 小时前
赋能在线教育与企业培训:视频直播点播平台EasyDSS视频点播的核心技术与应用实践
算法
吗~喽10 小时前
【LeetCode】四数之和
算法·leetcode·职场和发展