最大子数组和 滑动窗口解

class Solution {
//找到并返回数组nums的最大值
public int maxOfNums(int[] nums){
int maxAll = nums[0];
for(int i=1;i if(nums[i]>maxAll)
maxAll=nums[i];
return maxAll;
}
public int maxSubArray(int[] nums) {
int l=0,r=0;
//记录最大和
int maxSum=maxOfNums(nums);
//如果nums的最大值<=0,那就没必要算了,直接返回maxSum
if(maxSum<=0)
return maxSum;
//记录窗口和
int windowSum=0;

    while(r=0,窗口扩张
        if(windowSum>=0)
            windowSum+=nums[r++];
        //当windowSum<0,窗口收缩
        while(windowSum<0)
            windowSum-=nums[l++];
        //更新最大和
        maxSum=Math.max(maxSum,windowSum);
    }

    return maxSum;
}

}```

你可能感兴趣的:(Java写算法,leetcode,算法,贪心算法)