牛客网刷题之和为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结果:
相关文章推荐
- 和为S的连续正数序列(牛客网二十六)
- 【剑指offer】和为S的连续正数序列
- 求和为n连续正数序列 C++实现
- 找逆序的对数&&和为n的两个数字&&和为n的连续正数序列
- 和为s的连续正数序列
- 和为S的连续正数序列
- 和为n连续正数序列
- 和为S的连续正数序列
- 和为S的连续正数序列
- 剑指offer 41题【知识迁移能力】和为S的连续正数序列
- 和为s的连续正数序列
- 剑指Offer(57)和为S的连续正数序列
- 面试题41:和为s的两个数字 || 和为s的连续正数序列
- 剑指offer——和为s的两个数字VS和为s的连续正数序列
- 和为s的连续正数序列
- 和为s的两个数字 VS 和为s的连续正数序列
- Q41:和为s的两个数字VS和为s的连续正数序列
- 九度笔记之 1354:和为S的连续正数序列
- offer40--和为s的连续正数序列
- 和为S的连续正数序列