剑指offer 和为S的两个数字

  • 题目描述

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

输出描述:

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

  • 题目解答

这道题目还是属于双指针夹逼问题,一定要熟练。

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> ret;
		if (array.size() < 2)
			return ret;
		int l = 0, r = array.size() - 1;
		while (l < r){
			int num = array[l] + array[r];

			if (num == sum){
				ret.push_back(array[l]);
				ret.push_back(array[r]);
				break;
			}
			else if (num>sum) --r;
			else ++l;
		}
		return ret;
    }
};
弹钢琴的猫 /
Published under (CC) BY-NC-SA in categories 算法  tagged with 剑指offer