码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-09-07 13:37:52      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:思路   sys   new   bsp   style   比较   根据   技术分享   ack   

例如  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);
        
        
        
    }
    
    
    
    
}

结果:

技术分享

 

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

标签:思路   sys   new   bsp   style   比较   根据   技术分享   ack   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!