第一次做滑动窗口,看的题解做的,其实本质还是双指针;
思想就是下面的图,主要还是里面有一点细节,比如循环终止条件、数组添加元素、集合转化为数组

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;
}

本文介绍了一种使用滑动窗口解决连续整数序列问题的方法。通过调整左右指针的位置来寻找所有可能的连续整数序列,这些序列的和等于给定的目标值。文章详细解释了实现过程中的关键步骤,并提供了完整的Java代码示例。
519

被折叠的 条评论
为什么被折叠?



