剑指offer——和为S的两个数字
来源:互联网 发布:广东高考口语软件 编辑:程序博客网 时间:2024/05/01 20:09
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
思路:
因为是排序好的数组,所以能比较方便地遍历。
可以定义两个“指针”,一个指向序列的最小值,一个指向小于S的最大值,然后分别向中间遍历。
import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list = new ArrayList<>(); if(array==null||array.length==0) return list; int index = 0; for(int i = 0; i<array.length; i++){ if(array[i]>=sum){ index = i-1; break; } if(i==array.length-1) index = i; } int min = Integer.MAX_VALUE; for(int i = index; i>=1; i--){ if((array[index]+array[index-1])<sum) break; for(int j = 0; j<i; j++){ if((array[j]+array[i])==sum){ int temp = array[j]*array[i]; // 有没有可能越界? if(temp<min){ min = temp; list.clear(); list.add(array[j]); list.add(array[i]); } break; } if((array[j]+array[i])>sum) break; } } return list; }}
上面的代码还可以更精简,虽然题目要求我们输出乘积最小的值,但分析即知乘积最小的一对,一定是最开始找到的第一对,找到第一对以后就不必找了。
不管sum是正数还是负数还是0,都满足第一对即是乘积最小的对,所以可以用此方法。
import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list = new ArrayList<Integer>(); if (array == null || array.length < 2) { return list; } int i=0,j=array.length-1; while(i<j){ if(array[i]+array[j]==sum){ list.add(array[i]); list.add(array[j]); return list; }else if(array[i]+array[j]>sum){ j--; }else{ i++; } } return list; }}
阅读全文
0 0
- 《剑指offer》——和为S的两个数字
- 剑指offer——和为S的两个数字
- 剑指offer——和为S的两个数字
- 剑指offer——和为S的两个数字
- 剑指offer—和为S的两个数字
- 剑指offer—-和为S的两个数字
- 剑指offer—和为s的两个数字
- 剑指offer — 和为S的两个数字
- 剑指offer——和为s的两个数字VS和为s的连续正数序列
- 剑指offer 面试题41—和为s的两个数字VS和为s的连续正数序列
- 剑指offer——和为s的两个数字且乘积最小
- 剑指offer(java代码)——和为S的两个数字
- 剑指Offer——(41)和为S的两个数字
- 剑指Offer—42—和为S的两个数字
- 剑指offer——面试题41:和为s 的两个数字
- 剑指offer系列源码-和为S的两个数字
- 剑指offer--和为S的两个数字
- 《剑指offer》和为S的两个数字
- PreTranslateMessage 与 WindowProc 的关系
- VMware配置Mysql允许远程连接
- valid number
- android Volley获取VolleyError的body
- 强引用、软引用、弱引用
- 剑指offer——和为S的两个数字
- 关于python发送邮件的一点建议
- cout格式化输出
- 数字冰雹智慧园区运行监控中心
- Go实战--通过basic认证的http(basic authentication)
- [BZOJ]1098: [POI2007]办公楼biu
- 最大间距
- Android 自定义控件之View的绘制流程
- U盘安装Win10,遇到“由于存在受损的安装文件 因此安装无法继续”