题目描述
输入一个递增排序的数组array和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。
输入: [1,2,4,7,11,15],15 返回值: [4,11] 说明: 返回[4,11]或者[11,4]都是可以的
题解1:使用双层for循环 ---会超时
题解1:使用双指针
思路:由于是递增的有序数组,所以可以采用双指针 图示来自某位大佬,在此借鉴:
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
// if(array.size() ==0) return {};
//因为是有序的递增的数组,可以采用双指针
int left = 0;
int right =array.size()-1;
int result = 0;//存放和
while(left<=right){
result = array[left] + array[right];
if(result == sum){
return {array[left],array[right]};
}else if(result > sum){ // 结果值大于sum,那么就把right向左移动,指向更小的数值
right--;
}else// 结果值小于sum,那么就把left向右移动,指向更大的数值
left++;
}
return {};
}
};