剑指No.57-2_和为s的连续正数序列
- 题目:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例:输入:target = 9
输出:[[2,3,4],[4,5]]
- 双指针的滑动窗口
public int[][] findContinuousSequenceWay(int target){
List<int[]> result = new ArrayList<>();
int sum = 0;
int j = 1;
for (int i = 2; i < target;){
if (i <= j){
i++;
continue;
}
for (int k = j; k <= i; k++){
sum += k;
}
if (sum == target){
int[] temp = new int[i - j + 1];
for (int k = 0, h = j; k < temp.length; k++)
temp[k] = h++;
result.add(temp);
i++;
j++;
}else if (sum < target){
i++;
}else{
j++;
}
sum = 0;
}
return result.toArray(new int[result.size()][]);
}