本文主要是介绍1749 任意子数组和的绝对值的最大值【leetcode每日一题系列】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
采用前缀和维护数组,题目中子数组为连续的子序列,即求连续子序列中和的绝对值的最大值:
result = 子序列中正数和 - 子序列中负数和
因此,要求result,只需要求子序列的最大正数和减去最小负数和。
定义sum变量表示前缀和,则数组nums的前缀和为:
sum = nums[0]+nums[1]+nums[2]+...+nums[n];
定义max变量表示前缀和中的最大前缀和:
max = nums[0]+nums[1]+nums[2]+...+nums[j];
定义min变量表示前缀和中的最小前缀和:
min = nums[0]+nums[1]+nums[2]+...+nums[i];
则可知,数组中子数组和的绝对值最大值为:
result = max-min = nums[i+1]+nums[i+2]+... +nums[j] (当j>i时);
result = max-min = -nums[j+1]-nums[j+2]-... -nums[i] (当i>j时,此时可理解为全为负数);
Java代码如下:
class Solution {public int maxAbsoluteSum(int[] nums) {//判断是否为空if(nums.length==0) return 0;int max = 0,min = 0,count = 0;for(int num:nums){count+=num;max = Math.max(max,count);min = Math.min(min,count);}return max-min;}
}
这篇关于1749 任意子数组和的绝对值的最大值【leetcode每日一题系列】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!