任意子专题

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

思路:dp 说到绝对值,大家肯定不陌生,但是用在dp上就会使问题变得稍微复杂一些了。 我们在最大子数组和的那道题中知道,在状态转移的时候,我们会舍弃掉为负数的连续部分,重新构建连续的子串。但是,这里不一样,我们并不能轻易舍弃负数的部分,负数也可能让这个子数组和的绝对值变成最大的,例如0,-1000,1,2这个序列就很典型,我们如果按照上一个题那样做,就会使最大值变成3,而不是1000。 这里

1749 任意子数组和的绝对值的最大值【leetcode每日一题系列】

采用前缀和维护数组,题目中子数组为连续的子序列,即求连续子序列中和的绝对值的最大值:  result = 子序列中正数和 - 子序列中负数和 因此,要求result,只需要求子序列的最大正数和减去最小负数和。 定义sum变量表示前缀和,则数组nums的前缀和为: sum = nums[0]+nums[1]+nums[2]+...+nums[n];  定义max变量表示前缀

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

题目 思路  这道题我在刚开始做时是想的动态规划的做法。考虑到已有和最大子数组的动态规划解法,本题要求绝对值最大的子数组,因此再维护一个以当前元素结尾的子数组和最小的数组,绝对值最大的数一定在和最大和和最小中产生。后来借鉴了其他大神的解法,这道题可以先求出前缀和数组,然后用其中的最大值和最小值相减即可(因为题目是求绝对值最大,因此不用考虑前缀和中减数和被减数的位置关系) class So

每日随机一题 leetcode1749. 任意子数组和的绝对值的最大值

题: 思路: 我一开始的思路是基于贪心,想着如果加上一个数以后还不如从这个数本身开始,那就从这个数开始,但是这样的思想是错误的,因为你没办法保证当前子数组不是因为有从正数变成负数或者从负数变成正数而导致max发生变化了。 于是看了答案 答案思路: 当我们有了前缀和数组 sum 之后,需要求任意一段子数组 [i,j] 的和 可以直接通过 sum[j] - sum[i - 1] 得出。 现在