和为S的两个数字
来源:互联网 发布:ubuntu安装jdk tar.gz 编辑:程序博客网 时间:2024/05/29 04:48
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
算法解析:
对于一个递增的有序数组,我们如果从头到尾暴力扫描,那就十分不智,如果我们将两个标志位分别设在开头和结尾,如果这两个标志位的和小于S,则将small向后移动,如果标志位的和大于s,则big前移,如果相等,我们就考虑这两个数的乘积,rank后决定是否更新结果。
代码如下:
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { int small = 0; int big = array.length - 1; ArrayList<Integer> result = new ArrayList<>(); if (array == null || array.length < 1){ return result; } while (small < big){ int check = array[small] + array[big]; if (check == sum){ if (result.size() == 0){ result.add(array[small]); result.add(array[big]); }else{ check = result.get(0) * result.get(1); if (check > (array[small] * array[big])){ result.clear(); result.add(array[small]); result.add(array[big]); } } small ++; }else if (check > sum){ big --; }else{ small ++; } } return result; }
0 0
- 和为S的两个数字
- 和为S的两个数字
- 找出和为S的两个数字
- 和为S的两个数字
- 【5】和为s的两个数字
- 和为S的两个数字
- 和为s的两个数字
- 和为s的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 和为s的两个数字
- 和为s的两个数字
- 牛客网 | 和为S的两个数字
- 和为s的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 和为S的两个数字
- 使用FormAuthenticationFilter中的重要方法实现了表单验证
- 工控协议Fuzzing开源工具Aegis
- java用jacob批量word转xml
- 好雨云帮一周问答集锦(2.6-2.12)
- redis命令行查看中文不乱码
- 和为S的两个数字
- Apache Mesos 学习
- [BZOJ4625][BeiJing2016]水晶 网络流
- Android中Log机制
- 支付宝支付即时到账接口在ThinkPHP商城中的应用
- 【Linux】第一个简单shell
- 在DragonBoard 410c上实现高并发处理TCP服务器
- 【笔记】SpringMVC系列框架 [ 2 ]
- 2. js中的 || 与 && 运算符