2023-08-08 LeetCode每日一题(任意子数组和的绝对值的最大值)

2023-08-08每日一题

一、题目编号

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:
在这里插入图片描述
示例 2:
在这里插入图片描述
提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

四、解题代码

class Solution {
public:
    int maxAbsoluteSum(vector<int>& nums) {
        int n = nums.size();
        int dp1[n+5];
        int dp2[n+5];
        int max0 = nums[0];
        int min0 = nums[0];
        memset(dp1, 0, sizeof(dp1));
        memset(dp2, 0, sizeof(dp2));
        dp1[0] = nums[0];
        dp2[0] = nums[0];
        for(int i = 1; i < n; ++i){
            dp1[i] = max(nums[i], dp1[i-1] + nums[i]);
            dp2[i] = min(nums[i], dp2[i-1] + nums[i]);
            max0 = max(dp1[i], max0);
            min0 = min(dp2[i], min0);
        }
    return max(abs(max0), abs(min0));
    }
};

五、解题思路

(1) 采用一维DP的思路解决问题。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)