lintcode620- Maximum Subarray IV- medium

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;
    }
}
 
 
原文地址:https://www.cnblogs.com/jasminemzy/p/7818950.html