【数组12】和为S的连续正数序列
2016-07-30 20:48
302 查看
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
import java.util.ArrayList; public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int s) { ArrayList<ArrayList<Integer> > numList=new ArrayList<ArrayList<Integer> >(); ArrayList<Integer> list=null; //若s=2,只能0,1,不能满足。假定是从1开始 if(s<3) return numList; int small=1; int big=2; int curSum=small+big; int midVal=(1+s)/2; while(small<midVal){ //放在这里,每次重新设置 list=new ArrayList<Integer>(); if(curSum==s){ addNums(list,small,big); } while(curSum>s &&small<midVal){ curSum-=small; small++; if(curSum==s){ addNums(list,small,big); } } //curSum<s if(list.size()>0){ numList.add(list); } big++; curSum+=big; } return numList; } private void addNums(ArrayList<Integer> list,int small,int big){ for(int i=small;i<=big;i++){ list.add(i); } } }
2017/08/22
import java.util.ArrayList; public class Solution { public int getSum(int index1, int index2){ int sum = 0; for(int i = index1; i <= index2; i++){ sum += i; } return sum; } public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer> > list = new ArrayList<ArrayList<Integer> >(); ArrayList<Integer> tempList = new ArrayList<Integer>(); int index1 = 1; int index2 = index1 + 1; while(index2 < sum){ int result = getSum(index1, index2); if(result == sum){ for(int i = index1; i <= index2; i++){ tempList.add(i); } list.add(tempList); tempList = new ArrayList<Integer>(); index2++; } else if(result > sum){ index1++; } else{ index2++; } } return list; } }
相关文章推荐
- 每天一道算法题(12)——和为n的连续正数序列或者随机数
- 每天一道算法题(12)——和为n的连续正数序列或者随机数
- 和为n连续正数序列 & 排序数组中和为给定值的两个数字
- 40. 网易面试题:和为n连续正数序列(数组)
- 51.和为n连续正数序列(数组)。
- 给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 【追求进步】和为S的连续正数序列
- 和为s的两个数字&&和为s的连续正数序列
- 和为S的两个数字VS和为S的连续正数序列
- 剑指offer--和为S的连续正数序列
- 数组中的最长连续序列
- 和为s的两个数字VS和为s的连续正数序列
- 剑指offer:和为S的连续正数序列
- 41.和为s的两个数字&和为s的连续正数序列
- 输出有序数组的连续序列范围
- 和为S的连续正数序列
- 和为S的连续正数序列
- 无序整形数组,如何找到最长连续序列长度,时间复杂度O(n)
- 和为S的两个数字之和&&和为s的连续正数序列