给定一个数组,值全是正数,请返回累加和为给定值k的最长子数组长度。
例如 target = 11
nums = { 10 ,1 ,1 ,1, 1, 5 ,1 ,1}
返回 7
双指针 :
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) { //和 等于目标值
int len1 = right - left + 1;
len = Math.max(len, len1); //求最长长度
sum -= arr[left++];
} else if (sum < k) { //和小于目标值 右指针移动
right++;
if (right == arr.length) {
break;
}
sum += arr[right];
} else { //和大于目标值 左指针移动
sum -= arr[left++];
}
}
return len;
}