累加和位指定值的最长子数组

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

 

posted @ 2017-04-26 00:21  起个po名真费劲  阅读(139)  评论(0)    收藏  举报