给定一个数组,值全是正数,请返回累加和为给定值k的最长子数组长度。

给定一个数组,值全是正数,请返回累加和为给定值k的最长子数组长度。

public static int getMaxLength(int[] arr,int k){
        if (arr == null || arr.length == 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;
    }
定义两个指针左,右,当sum=k时,左指针右移,直到右指针到最后

你可能感兴趣的:(给定一个数组,值全是正数,请返回累加和为给定值k的最长子数组长度。)