【剑指Offer刷题小记】和为S的两个数字(JAVA版)
2020-04-04 本文已影响0人
park_one
题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:对应每个测试案例,输出两个数,小的先输出。
题目分析:若两个数a、b(a≤b)的和为S,则有(a+m)+(b-m) = s,而(a+m)*(b-m)=ab+(b-a)*m-m*m≥ab,所以越外层的ab乘积越小。因此可以定义两个指针分别指向数组的左右两边,判断他们的和是否为S,若小于S则左指针右移,若大于S则右指针左移,直到两个数之和等于S即可返回。代码截图: