题目
给定一个正数数组,求所有累加和等于k的最长子数组
- 通过设置窗口,如果当前累加和大于k,那么向右移动左指针,如果累加和小于k,向右移动右指针,如果累加和等于k,那么记录窗口长度然后向右移动左指针,如果窗口长度已经为0,累加和还是大于k,则左右指针都向右移动
function process(arr, k) {
let left = 0,
right = 0,
max = 0,
sum = arr[0];
while (right < arr.length) {
if (sum > k) {
sum -= arr[left];
if (left === right) {
left++;
right++;
} else {
left++;
}
} else if (sum < k) {
right++;
if (right === arr.length) {
break;
}
sum += arr[right];
} else {
const len = right - left + 1;
max = Math.max(max, len);
sum -= arr[left];
left++;
}
}
return max;
}