剑指offer-和为S 的连续正数序列-Java
2018-03-27 12:24
369 查看
题目描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的
4000
顺序
思路解析:
用一个代表最小值,另一个代表最大值,还有一个累加求和
最小值小于mid可以减少时间复杂度
如果总和小于目标和,那么就把最大值加1;如果总和大于目标和,那么就把最小值加1(后移)
如果相等,就加入ArrayList类型的listall,注意add就是循环。
代码:import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> listall = new ArrayList<ArrayList<Integer>>();
if(sum<3){
return listall;
}
int small=1;
int big = 2;
int mid = (sum+1)/2;
int cursum=small+big;
while(small<mid){
while(cursum>sum&&small<mid){
cursum = cursum-small;
small++;
}
if(cursum==sum){
ArrayList<Integer> listsum = new ArrayList<Integer>();
add(listsum,small,big);
listall.add(listsum);
}
big++;
cursum = cursum+big;
}
return listall;
}
private static void add(ArrayList<Integer> list,int small,int big){
for(int i=small;i<=big;i++){
list.add(i);
}
}
}
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的
4000
顺序
思路解析:
用一个代表最小值,另一个代表最大值,还有一个累加求和
最小值小于mid可以减少时间复杂度
如果总和小于目标和,那么就把最大值加1;如果总和大于目标和,那么就把最小值加1(后移)
如果相等,就加入ArrayList类型的listall,注意add就是循环。
代码:import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> listall = new ArrayList<ArrayList<Integer>>();
if(sum<3){
return listall;
}
int small=1;
int big = 2;
int mid = (sum+1)/2;
int cursum=small+big;
while(small<mid){
while(cursum>sum&&small<mid){
cursum = cursum-small;
small++;
}
if(cursum==sum){
ArrayList<Integer> listsum = new ArrayList<Integer>();
add(listsum,small,big);
listall.add(listsum);
}
big++;
cursum = cursum+big;
}
return listall;
}
private static void add(ArrayList<Integer> list,int small,int big){
for(int i=small;i<=big;i++){
list.add(i);
}
}
}
相关文章推荐
- 剑指offer面试题41_2 和为s的连续正数序列(java实现)
- 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列
- 剑指offer----和为S的连续正数序列----java实现
- 剑指Offer 41题 和为s的两个数字VS 何为S的连续正数序列 Java版
- 剑指offer 41题【知识迁移能力】和为S的连续正数序列
- 剑指offer——面试题41:和为s的两个数字VS和为s的连续正数序列
- 【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】
- 剑指offer--和为S的连续正数序列
- 【剑指offer】Q41:和为s的连续正数序列
- 【剑指offer之和为s的两个数字VS和为s的连续正数序列】
- 剑指offer 41 - 和为s的两个数字VS为s的连续正数序列
- 剑指offer 和为s的连续正数序列
- 剑指offer-和为s的两个数字VS和为s的连续正数序列
- 剑指offer——41.和为S的连续正数序列
- 剑指Offer之 - 和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer之面试题41和为s的两个数字VS和为s的连续正数序列
- 剑指offer-面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指Offer——和为S的连续正数序列
- 剑指Offer学习总结-和为S的连续正数序列
- 【剑指offer】6.3知识迁移能力——面试题41:和为s的两个数字VS和为s的连续正数序列