第一次做滑动窗口,看的题解做的,其实本质还是双指针;
思想就是下面的图,主要还是里面有一点细节,比如循环终止条件、数组添加元素、集合转化为数组
public int[][] findContinuousSequence(int target) {
/** 定义一个集合用来存放结果数组*/
ArrayList<int[]> list = new ArrayList<>();
/** 定义两个指针,从头开始,因为题目要求是至少包含两个数,就一个是1,一个是2*/
int left = 1;
int right = 2;
int sum = 3;
/** 两个指针的元素相加,如果小于target,就将右指针向后移,如果大于target,就将左指针向后移*/
/** 如果相加后相等,就将两个指针中间(包括两个指针)的元素存入数组中,再将数组存入集合中
* 之后不要忘了将左指针向后移动*/
/** 跳出循环的条件为left不等于right*/
while(left < right){
if(sum < target){
right++;
sum = sum + right;
}else if (sum > target){
sum = sum - left;
left++;
}else if (sum == target){
int[] arr = new int[right - left + 1];
for (int i = left; i <= right; i++){
arr[i-left] = i;
}
list.add(arr);
sum = sum - left;
left++;
}
}
int[][] ints = list.toArray(new int[0][]);
return ints;
}