【题目】
假定给出一个有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; } }