209-Minimum Size Subarray Sum

【题目】

  假定给出一个有n个正整数的数组num和一个正整数s,找出一个子数组使其和sum大于s并返回子数组最小长度。如果不存在就返回0

      举例:数组[2,3,1,2,4,3]和s=7

      子数组[4,3]满足条件

【分析】

      1. 首先想到是两层for循环的方式,明显不会AC

      2. 优化的方式:设置2个指针left和right,left指向子数组第一个元素的索引,right指向子数组最后一个元素的索引。

                       先移动right指针,直到sum>s后,再开始移动left指针

【算法实现】

public class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int len = nums.length;
        int left = 0;
        int right = 0;
        int sum = 0;
        int result = len+1;
        while(right<len) {
            sum += nums[right];
            while(sum >= s) {
                int temp = right-left+1;
                if(temp < result)
                    result = temp;
                sum -= nums[left];
                left++;
            }
            right++;
        }
        if(result == len+1)
            return 0;
        else 
            return result;
    }
}

 

posted @ 2015-05-20 11:28  hwu_harry  阅读(154)  评论(0编辑  收藏  举报