描述
给定一个已经 按升序排列 的数组,找到两个数使他们加起来的和等于特定数。
函数应该返回这两个数的下标,index1必须小于index2。注意返回的值不是 0-based。
你可以假设每个输入刚好只有一个答案
您在真实的面试中是否遇到过这个题? 是
样例
给定数组为 [2,7,11,15] ,target = 9
给定一个已经 按升序排列 的数组,找到两个数使他们加起来的和等于特定数。
函数应该返回这两个数的下标,index1必须小于index2。注意返回的值不是 0-based。
你可以假设每个输入刚好只有一个答案
您在真实的面试中是否遇到过这个题? 是
样例
给定数组为 [2,7,11,15] ,target = 9
返回 [1,2]
分析
依次遍历每个数,对剩下的使用二分法,查找是否等于target。
程序
class Solution {
public:
/**
* @param nums: an array of Integer
* @param target: target = nums[index1] + nums[index2]
* @return: [index1 + 1, index2 + 1] (index1 < index2)
*/
vector<int> twoSum(vector<int> &nums, int target) {
// write your code here
vector<int> results(2,0);
if(nums.empty()){
return results;
}
for(int i = 0; i < nums.size() - 1; i++){
int begin = i + 1;
int end = nums.size() - 1;
while(begin <= end){
int mid = (begin + end) / 2;
if(nums[i] + nums[mid] < target)
begin = mid + 1;
else if(nums[i] + nums[mid] > target)
end = mid - 1;
else{
results[0] = i + 1;
results[1] = mid + 1;
return results;
}
}
}
return results;
}
};