package day;
/**
* 累加和位指定值的最长子数组
* 这是一个可伸缩的滑动窗口,不断地在k值的上下波动,
* 并且要不断的判断right是否越界,由于都是整数,所以left不会比right先到arr.length位置上。
* @author Administrator
*
*/
public class Demo2 {
public static int getMaxLength(int[] arr, int k){
if(arr == null || arr.length == 0 || k <= 0){
return 0;
}
int left = 0;
int right= 0;
int sum = arr[0];
int len = 0;
while(right <= arr.length){
//匹配到相等了 需要记录
if(sum == k){
len = Math.max(len, right - left + 1);
sum = sum - arr[left ++];
}
else if(sum < k){
right ++;
if(right == arr.length){
break;
}
sum =sum + arr[right];
}
else{
sum = sum - arr[left ++];
}
}
return len;
}
}