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