Given an integer arrays, find a contiguous subarray which has the largest sum and length should be greater or equal to given length k
.
Return the largest sum, return 0 if there are fewer than k elements in the array.
Notice
Ensure that the result is an integer type.
Example
Given the array [-2,2,-3,4,-1,2,1,-5,3]
and k = 5
, the contiguous subarray [2,-3,4,-1,2,1]
has the largest sum = 5
.
前缀法,只是这次preMin是在第一个到第i-k个数内部找而已。还是最大化sum[j] - sum[i],就要求sum[i]一定要最小的。
public class Solution { /* * @param nums: an array of integer * @param k: an integer * @return: the largest sum */ public int maxSubarray4(int[] nums, int k) { // write your code here if (nums == null || nums.length == 0 || nums.length < k) { return 0; } int[] sums = new int[nums.length]; sums[0] = nums[0]; for (int i = 1; i < sums.length; i++) { sums[i] = sums[i - 1] + nums[i]; } int minPre = 0; int maxSum = Integer.MIN_VALUE; for (int i = k - 1; i < sums.length; i++) { int crtSum = sums[i] - minPre; maxSum = Math.max(maxSum, crtSum); minPre = Math.min(minPre, sums[i - k + 1]); } return maxSum; } }