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

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

题目描述

在这里插入图片描述

题意解析

在给定的数组中,选取一段连续的子数组,要求这段连续子数组的绝对值为最大,求最大值。

思路分析

如果想要快速的算出一个数组中连续区间的和,使用前缀和是很好的选择,我们求出数组的前缀和数组之后,能在O(1)的时间复杂度内算出一段连续区间的和。所以如果我们是求取和的最大值,那么是不是只需要使用前缀和数组中的最大减去最小就可以了? 我们可以分情况看一下:

  1. max > 0, min > 0, ans = max - 0
  2. max > 0, min < 0, ans = max - min
  3. max < 0, min < 0, ans = 0 - min

如果数组中元素都为正或者都为负,这两种情况是最简单的,只需要全加起来求和算绝对值就行了,而剩下的一种情况就是max - min了,所以这种思路是可行。我们可以将max和min初始化时均设置为0,这样就不用去判断条件,直接返回结果就可以。

代码

class Solution {

    public int maxAbsoluteSum(int[] nums) {
        int minx = 0; 
        int maxx = 0;
        int sum = 0; 
        for(int i=0;i<nums.length;i++){
            sum += nums[i]; 
            if(sum > maxx) maxx = sum; 
            if(sum < minx) minx = sum;
        } 
        return maxx - minx; 
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoKnowovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值