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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法总结之 未排序正数数组中累加和为给定值的最长子数组长度相关的知识,希望对你有一定的参考价值。

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

结果:

技术分享

 



以上是关于算法总结之 未排序正数数组中累加和为给定值的最长子数组长度的主要内容,如果未能解决你的问题,请参考以下文章

一天一道算法题---未排序数组中累加和为给定值的最长子数组

[算法]最长子数组问题

算法总结之 未排序数组中累加和小于或等于给定值的最长子数组长度

未排序数组中累加和为给定值的最长子数组长度

读书笔记之《程序员代码面试指南(数组和矩阵问题)》

未排序数组中累加和小于或等于给定值的最长子数组长度