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

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

相关推荐
谈笑也风生11 分钟前
经典算法题型之排序算法(四)
数据结构·算法·排序算法
AI科技星12 分钟前
空间螺旋电磁耦合常数 Z‘:拨开迷雾,让电磁力变得直观易懂
服务器·人工智能·科技·算法·生活
亚伯拉罕·黄肯25 分钟前
强化学习算法笔记
笔记·算法
only-qi26 分钟前
LeetCode 148. 排序链表
算法·leetcode·链表
岁岁的O泡奶29 分钟前
NSSCTF_crypto_[SWPUCTF 2023 秋季新生赛]dpdp
经验分享·python·算法·密码学
smj2302_7968265230 分钟前
解决leetcode第3791题.给定范围内平衡整数的数目
python·算法·leetcode
不能只会打代码31 分钟前
力扣--1970. 你能穿过矩阵的最后一天(Java)
java·算法·leetcode·二分查找·力扣·bfs·最后可行时间
AndrewHZ1 小时前
【图像处理基石】如何高质量地生成一张庆祝元旦的图片?
图像处理·人工智能·opencv·算法·计算机视觉·生成式模型·genai
光明西道45号1 小时前
Leetcode 15. 三数之和
数据结构·算法·leetcode
还不秃顶的计科生1 小时前
LeetCode 热题 100第一题:两数之和python版本
python·算法·leetcode