剑指offer:和为S的两个数字
来源:互联网 发布:mysql 修复数据表命令 编辑:程序博客网 时间:2024/06/18 14:23
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
证明:
因为是递增数组,所以第一次求出a[low]+a[high]==k,则是乘机最小的那个。当两个数x+y=k,当x和y越接近乘机越大。证明如下:
x+y=k
两边平方:
(x+y)^2=k^2
然后继续变:
(x-y)^2+4xy=k^2
很显然x和y越接近,xy就越大。故让x和y尽量相差很大。
注:最开始是想先固定一个数,再二分查找另外一个。时间复杂度是O(nlogn)。不如下面这个
class Solution {public: vector<int> FindNumbersWithSum(vector<int> array, int sum) { int i = 0, j = array.size() - 1; vector<int> res; while (i < j){ if (array[i] + array[j] == sum){ res.push_back(array[i]); res.push_back(array[j]); break; } else if (array[i] + array[j] < sum){ i++; } else{ j--; } } return res; }};
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的两个数字
- 异常的分类及处理方法
- C语言图书管理系统
- [Nutch]Nutch重要命令使用说明
- VMware Workstation 12安装 Solaris 10 / 11
- JAVA——网络编程(TCP)
- 剑指offer:和为S的两个数字
- HDU-ACM2005
- 解决ScrollView 里面嵌套Listview 的冲突
- HDU-ACM2006
- DragonBoard 410c手把手进行安卓开发之底层移植
- .Net C#(框架/值类型/参数类型)——学习笔记
- HDU-ACM2007
- 1369 - Answering Queries<数>
- HDU-ACM2008