首页 > 编程语言 > 详细

算法总结之 未排序正数数组中累加和为给定值的最长子数组长度

时间:2017-09-07 12:32:48      阅读:265      评论:0      收藏:0      [点我收藏+]

例如  arr=[1,2,1,1,1]   k=3

累加和为 3的最长子数组为[1,1,1]   所以结果为3

 

 思路方法:

  两个指针 left  和right   初始值都是0  都在左边

   sum 代表 子数组 left.....right的和

   len 一直记录累加和为k的所有子数组中最大子数组的长度

  

  根据 sum与k的比较结果决定  left 跟 right 哪一个移动!!!!

 

package TT;

public class Test70 {

    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 -= arr[left++];
            }else if(sum <k) {
                right++;
                if(right== arr.length){
                    break;
                }
                sum +=arr[right];
            }else {
                sum -= arr[left];
            }
            
            
        }
        
        return len;
    }
    
    public static void main(String[] args){
        
        int[] arr = new int[5];
        arr[0]=1;
        arr[1]=2;
        arr[2]=1;
        arr[3]=1;
        arr[4]=1;
        
        int x =  getMaxLength(arr,3);
        System.out.println(x);
        
        
        
    }
    
    
    
    
}

结果:

技术分享

 

算法总结之 未排序正数数组中累加和为给定值的最长子数组长度

原文:http://www.cnblogs.com/toov5/p/7488792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!