您的位置:首页 > 其它

牛客网刷题之和为S的连续正数序列

2016-10-29 09:31 176 查看

题目描述:



解题思路:

  用两个指针分别指向前边的一个小数和大数,如果前边的数相加小于于S。那么就让大数的指针指向下一个位置,相当于加下一个数;如果小于就去掉最前面的哪个小数,使指针移向下一个位置;如果当前相加的数等于s,那么就返回该序列即可。

题解:

public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
if (sum < 3)
return lists;
int small = 1;
int big = 2;
int end = (sum + 1) / 2;
int curSum = 3;
while (small < end) {
while (curSum < sum) {
big++;
curSum += big;
}
if (curSum == sum) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = small; i <= big; i++) {
list.add(i);
}
lists.add(list);
}
curSum -= small;
small++;
}
return lists;
}


ac结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: