剑指offer-42.和为S的两个数字

xiaoxiao2021-02-28  82

题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 

输出描述:
对应每个测试案例,输出两个数,小的先输出。

思路:此题关键之处在于任意多对两个数的和相等,乘积最小的两个数为两个数之差的绝对值最大,也就是说可以先定义首元素和最后一个元素,

         判断两个数之和是否等于给定sum,如果不等,向后递增或者向前递减,(注意,该数组严格递增排序,题目已说明)

class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int>res; int n = array.size(); int i = 0; int j = n - 1; while (i < j) { if (array[i] + array[j] == sum) { res.push_back(array[i]); res.push_back(array[j]); break; } while (array[i] + array[j] > sum) j--; while (array[i] + array[j] < sum) i++; } return res; } };

转载请注明原文地址: https://www.6miu.com/read-38877.html

最新回复(0)