剑指offer之和为S的连续正数序列
来源:互联网 发布:高考改革 知乎 编辑:程序博客网 时间:2024/05/17 09:20
题目描述
输入一个递增排序的数组和一个数字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; }}
阅读全文
0 0
- 剑指Offer之和为S的连续正数序列
- 剑指offer之和为S的连续正数序列
- 剑指offer之和为S的连续正数序列
- 剑指offer之和为S的连续正数序列
- 【剑指offer之和为s的两个数字VS和为s的连续正数序列】
- 剑指offer面试题之和为S的连续正数序列
- 剑指offer(二十二)之和为S的连续正数序列
- 剑指offer 41 和为S的连续正数序列
- 【剑指offer】Q41:和为s的连续正数序列
- 剑指offer--和为S的连续正数序列
- 《剑指offer》和为S的连续正数序列
- 剑指offer—和为S的连续正数序列
- 剑指offer-和为S的连续正数序列
- 剑指offer:和为S的连续正数序列
- 剑指offer:和为S的连续正数序列
- 剑指offer 和为S的连续正数序列
- [剑指offer]和为S的连续正数序列
- 剑指offer 之 和为S的连续正数序列
- 线性模型
- Django Hello World
- oracle子查询
- office--word使用技巧——论文排版
- linux常用操作命令
- 剑指offer之和为S的连续正数序列
- 最长上升连续子序列-LintCode
- 算法1.1.27
- DL0-DL tips
- leetcode 368. Largest Divisible Subset 类似LISS最长递增子序列问题 + DP动态规划
- ***股票自动交易软件AutoStock使用说明***
- Java-Classloader-loadeClass(String,boolean)、findClass(String)类加载源码解析
- 请求分页存储管理方式
- 梯度下降(Gradient Descent)小结