部分文章内容为公开资料查询整理,原文出处可能未标注,如有侵权,请联系我,谢谢。邮箱地址:gnivor@163.com ►►►需要气球么?请点击我吧!

*LeetCode--209. Minimum Size Subarray Sum(和大于指定数字的最小子数组)

题目大意:给出一个数,在数组中寻找一个长度最短的子数组,使得数组和大于给定的数。

思路:使用两个指针, start end。end向后走,直到 sum 大于 s. 然后start向后, 直到sum 小于s. 同时更新 min值.

类似于编程之美--3.5 最短摘要的生成 http://www.cnblogs.com/gnivor/articles/4605701.html

public static int minSubArrayLen(int s, int[] nums) {
    int len = nums.length;
    int start = 0 ; 
    int end = 0;
    int sum = 0;
    int minlen = Integer.MAX_VALUE;
    int templen = 0;
    while(start<len&&end<len){
        while(sum<s&&end<len){
            sum = sum+nums[end];
            end++;
            templen++;
        }
        while(sum>=s && start<=end){ //和大于目标和 并且其实位置小于终点位置
            if(templen<minlen) 
                minlen = templen;
            sum = sum-nums[start];
            start++;
            templen--;
        }
    }
    
    if(minlen==Integer.MAX_VALUE) return 0;
    return minlen;
}

 

posted @ 2015-07-21 08:43  流了个火  阅读(117)  评论(0)    收藏  举报
►►►需要气球么?请点击我吧!►►►
View My Stats