2023-08-08力扣每日一题

链接:

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

题意:

求数组的所有子数组中,和的绝对值的最大值

解:

求子数组最大和和最小和,动态规划,前面的值如果小于0对找最大值无用,小于0对找最小值无用

优化:前缀和,子数组的值为sum[r]-sum[l-1],找最大的sumMax减去最小的sumMin,因为求得是绝对值,所以即使sumMax是左端L也没关系,Max-Min=abs(Min-Max)

实际代码:

#include
using namespace std;
int maxAbsoluteSum(vector& nums)
{
    int theMin=INT_MAX,theMax=INT_MIN,sumMin=0,sumMax=0;
    for(auto num:nums)
    {
        sumMin+=num;
        sumMin=min(sumMin,0);
        theMin=min(theMin,sumMin);
        sumMax+=num;
        sumMax=max(sumMax,0);
        theMax=max(theMax,sumMax);
    }
    //cout< nums;int num;
    while(cin>>num) nums.push_back(num);
    int ans=maxAbsoluteSum(nums);
    cout<

限制:

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

你可能感兴趣的:(力扣每日一题,leetcode,算法)