1 题目描述
2 算法思路
思路:
- 设滑动窗口的左边界i,右边界为j
- 初始化 i = 1 ,j = 1
- 当窗口内的和 > target 时,窗口需要减小,i++
- 当窗口内的和 < target 时,窗口需要增加,j++
- 当窗口内的和 = target 时,需要添加当前的结果到res
- 终止条件:i < target / 2
3 代码
class Solution {
public int[][] findContinuousSequence(int target) {
int i = 1;
int j = 1; //j的元素是不被包含的,也就是[i,j) ,左闭右开
int sum = 0;
List<int[]> res = new ArrayList<>();
while(i <= target / 2){
if(sum < target){
sum += j;
j++;
}else if(sum > target){
sum -= i;
i++;
}else{
int[] temp = new int[j-i];
for(int k = i; k < j; k++){
temp[k-i] = k;
}
res.add(temp);
sum -= i;
i++;
}
}
return res.toArray(new int[res.size()][]);
}
}