剑指offer:和为S的两个数字
来源:互联网 发布:创作漫画的软件 编辑:程序博客网 时间:2024/06/09 14:08
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
1.用两个ArrayList来实现
思路:用两个ArrayList,list1用来存放数组的积,list2用来存放最后的输出。如果list2发现有比存入的两个值积小的数,那么清空list2。再重新存。
import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list1=new ArrayList<Integer>(); ArrayList<Integer> list2=new ArrayList<Integer>(); int sul=0; for(int i=0;i<array.length;i++){ for(int j=i+1;j<array.length;j++){ if(array[i]+array[j]==sum){if(list1.size()==0){list1.add(i*j);sul=array[i]*array[j];if(i<=j){list2.add(array[i]);list2.add(array[j]);}else{list2.add(array[j]);list2.add(array[i]);}}else if(sul>array[i]*array[j]){list1.remove(0);list1.add(i*j);if(i<=j){list2.clear();list2.add(array[i]);list2.add(array[j]);}else{list2.clear();list2.add(array[j]);list2.add(array[i]);}} } } } return list2; }}
2.双指针思想
思想:数列满足递增,设两个头尾两个指针i和j,
若ai + aj == sum,就是答案(相差越远乘积越小)
若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),end--
若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),start++
O(n)
import java.util.*;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> listRes=new ArrayList<Integer>(); int n=array.length; int start=0; int end=n-1; while(start<end){ //相差越远乘积越小 if(array[start]+array[end]==sum){ listRes.add(array[start]); listRes.add(array[end]); return listRes; }else if(array[start]+array[end]<sum){ start++; }else if(array[start]+array[end]>sum){ end--; } } return listRes; }}
阅读全文
0 0
- 剑指offer系列源码-和为S的两个数字
- 剑指offer--和为S的两个数字
- 《剑指offer》和为S的两个数字
- 剑指offer—和为S的两个数字
- 剑指·offer:和为S的两个数字
- 《剑指offer》——和为S的两个数字
- 剑指offer-和为S的两个数字
- 剑指offer:和为S的两个数字
- 【剑指offer系列】 和为S的两个数字___41
- 剑指offer(43):和为s的两个数字
- 剑指offer:和为S的两个数字
- 剑指offer 和为S的两个数字
- [剑指offer]和为S的两个数字
- 剑指offer(39)-和为S的两个数字
- 剑指offer题解 和为S的两个数字
- 剑指offer|和为S的两个数字
- 《剑指offer》-和为S的两个数字
- 剑指offer—-和为S的两个数字
- CODE[VS]1002搭桥
- spring Boot报错 之五种(不打包运行)
- dos 上版
- css处理文本内容过多.....显示问题
- 通过FastJson把字符串转换成JSON和Map和List对象处理json数据
- 剑指offer:和为S的两个数字
- SpringBoot之JPA(J)
- ORA-01012: not logged 未完全关闭数据库导致ORA-01012: not logged的解决
- leetcode 216. Combination Sum III
- HDU 6143 Killer Names (容斥/第二类Stirling数)
- 【XSY1519】彩灯节 DP 数学 第二类斯特林数
- 机器学习&深度学习视频资料大汇总
- tornado----编写简易的服务器
- Supervisor-进程管理