zoukankan      html  css  js  c++  java
  • 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;
        }
    }
     
     
  • 相关阅读:
    Problem C: 爬楼梯
    Problem E: 倒水(Water)
    Problem H: tmk买礼物
    HDU 1078 FatMouse and Cheese
    POJ 3186 Treats for the Cows
    POJ 1661 Help Jimmy
    POJ 1458 Common Subsequence
    2018-软工机试-D-定西
    2018-软工机试-F-庙会
    2018-软工机试-C-和你在一起
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7818950.html
Copyright © 2011-2022 走看看