剑指offer之和为S的连续正数序列
2017-10-08 10:21
357 查看
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:对应每个测试案例,输出两个数,小的先输出。
传统解法:
ArrayList<Integer> res = new ArrayList<>(); for(int i=0;i<array.length;i++){ for(int j=i+1;j<array.length;j++){ if(array[i]+array[j]==sum){ res.add(array[i]); res.add(array[j]); return res; } } } return res; } }
双指针解法:
import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { /** *数列满足递增,设两个头尾两个指针i和j, 若ai + aj == sum,就是答案(相差越远乘积越小) 若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j -= 1 若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),i += 1 **/ ArrayList<Integer> res = new ArrayList<>(); int i=0,j=array.length-1; while(i<j){ if(array[i]+array[j]==sum){ res.add(array[i]); res.add(array[j]); break; }else if(array[i]+array[j]<sum){ i++; }else{ j--; } } return res;
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出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 sum) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if(sum<=1){ return res; } //双指针 int small=1; int big=2; while(small!=(1+sum)/2){ //当small==(1+sum)/2的时候停止 int curSum=sumOfList(small,big); if(curSum==sum){ ArrayList<Integer> list=new ArrayList<Integer>(); for(int i=small;i<=big;i++){ list.add(i); } res.add(list); small++; big++; }else if(curSum<sum){ big++;//比sum小,则大指针++ }else{ small++;//比sum大,则小指针-- } } return res; } public int sumOfList(int head,int leap){ //计算当前序列的和 int sum=head; for(int i=head+1;i<=leap;i++){ sum+=i; } return sum; } }
相关文章推荐
- 剑指Offer-面试题41-和为s 的两个数字vs 和为s 的连续正数序列
- 剑指offer面试题41_2 和为s的连续正数序列(java实现)
- 剑指Offer——和为S的连续正数序列
- 剑指offer-和为S的连续正数序列
- 【剑指offer-解题系列(42)】和为S的连续正数序列
- 剑指offer 和为S的连续正数序列
- 剑指offer—和为S的连续正数序列
- 剑指offer 6.3 知识迁移能力6-和为s的连续正数序列
- 剑指offer:和为S的连续正数序列
- 剑指Offer----面试题41(2):和为s的连续正数序列
- 【剑指offer】面试题57(2):和为S的连续正数序列
- 剑指offer面试题之和为S的连续正数序列
- [剑指offer]和为S的连续正数序列
- 【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】
- 【剑指offer】和为定值的连续正数序列
- 剑指offer——和为S的连续正数序列
- 剑指offer——41.和为S的连续正数序列
- 剑指offer——和为s的连续正数序列
- 剑指offer:和为S的连续正数序列
- 剑指Offer——(42)和为S的连续正数序列