*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; }

浙公网安备 33010602011771号