面试题57-题目二:和为S的连续正数序列
阅读更多/*
* 面试题57-题目二:和为S的连续正数序列
* 题目:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
* 思路:定义两个指针,分别递增,寻找和为s的序列
* 用两个数字small和big分别表示序列的最大值和最小值,首先将small初始化为1,big初始化为2.
* 如果从samll到big的和大于s,我们就从序列中去掉较小的值(即增大small),
* 相反,只需要增大big。
* 终止条件为:一直增加small到(1+sum)/2
*/
import java.util.ArrayList;
public class No57FindContinuousSequence {
public static void main(String[] args) {
No57FindContinuousSequence n = new No57FindContinuousSequence();
ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
lists = n.FindContinuousSequence(15);
for (int i = 0; i < lists.size(); i++) {
System.out.println(lists.get(i));
}
}
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;
while (small < (sum + 1) / 2) {
int curSum = getSum(small, big);
if (curSum < sum) {
big++;
} else if (curSum == sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = small; i <= big; i++) {
list.add(i);
}
lists.add(list);
big++;
}else {
small++;
}
}
return lists;
}
private int getSum(int small, int big) {
int sum = 0;
for(int i = small; i <= big; i++) {
sum += i;
}
return sum;
}
}
- 【剑指offer】面试题57(2):和为S的连续正数序列
- 面试题41—相关题目(和为s的所有连续正数序列)
- 面试题41-题目2:和为S的连续正数序列
- 面试题40:输出和为指定值的连续正数序列
- 剑指Offer面试题41(Java版):和为s的两个数字VS和为s的连续正数序列
- 40. 网易面试题:和为n连续正数序列(数组)
- 剑指offer——面试题:42(二)s的连续正数序列
- 剑指offer之面试题41和为s的两个数字VS和为s的连续正数序列
- 剑指offer-面试题41-和为s的两个数字VS和为s的连续正数序列
- 程序员面试题精选100题(26)-和为n连续正数序列
- 剑指offer——面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer 面试题41—和为s的两个数字VS和为s的连续正数序列
- 九度 题目1354:和为S的连续正数序列
- 面试题41-2:和为s的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指Offer面试题41和为s的两个数字与和为s的连续正数序列,面试题42翻转单词顺序与左旋转字符串
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 面试题:和为s的连续正数序列
- 【剑指Offer】面试题41:和为s的连续正数序列
- 剑指offer面试题41_2 和为s的连续正数序列(java实现)