前缀和(题中给出的数组中含有负数)
例题(最大子序和)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
题解
class Solution {
public int maxSubArray(int[] nums) {
int n = nums.length;
int[] pre = new int[n+1];
int max = Integer.MIN_VALUE;
for(int i = 1;i<=n;i++){
pre[i] = pre[i-1]+nums[i-1];
}
for(int i = 0;i<n;i++){
for(int j = 1;j<=n;j++){
if(i != j && j > i){
max = Math.max(max,pre[j]-pre[i]);
}
}
}
return max;
}
}
tips
如果前缀和中,数组中的元素都为正数,则不需要加if条件判断
如果结果中出现负数,需要加if条件判断(如果 i == j,结果为零,这是如果最大值为负数,那么结果会为零,测试错误;如果 i < j,那么pre[i-j]与pre[j-i]将会出现一正一负的效果,正结果将会覆盖结果为负的最大值,导致测试错误,如果最终结果为正,就不必考虑这种结果,并不会影响测试)
作者:ELE(ele)
链接:https://leetcode-cn.com/problems/maximum-subarray/solution/qian-zhui-he-java-by-objective-volhardsh-ja05/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。