算法1
(指针) $O(n)$
-
大小指针,如果代码水平高一个指针即可
-
大小指针分别指向2,1
-
当大小指针中间的数字序列之和大于给定的值,小指针向前移动
如果小于给定的值,大指针向后移动 -
当小指针大于给定值的二分之一,后面的值相加一定会大于给定的值,所以,循环结束条件就是当小指针小于给定值的一半
java 代码
class Solution {
public List<List<Integer>> findContinuousSequence(int sum) {
List<List<Integer> > arr = new ArrayList<>();
if (sum<0)
return arr;
int s = 1,b = 2;
int m = sum/2+1;
int sum1 = s+b;
while(s<m){
if(sum1<sum){
b++;
sum1+=b;
}else if(sum1>sum){
sum1-=s;
s++;
}else{
List<Integer> arr1 = new ArrayList<>();
for(int i = s;i <= b;i++){
arr1.add(i);
}
arr.add(arr1);
b++;
sum1+=b;
}
}
return arr;
}
}
牛逼