Q167. Two Sum II
分析
C++代码
class Solution {
private:
int binarySearch(vector<int> nums, int target, int left, int right){
int mid = (right-left)/2 + left;
while(left < right){
if(nums[mid] == target) return mid;
else if(nums[mid] < target) left = mid+1;
else right = mid-1;
mid = (right-left)/2 + left;
}
return mid;
}
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int left = 0;
int right = numbers.size()-1;
vector<int> res;
while(left <= right){
if (numbers[left] + numbers[right] == target){
res.push_back(left+1);
res.push_back(right+1);
return res;
}else if(numbers[left] + numbers[right] < target){
left = binarySearch(numbers, target-numbers[right], left+1, right-1);
}else{
right = binarySearch(numbers, target-numbers[left], left+1, right-1);
}
}
}
};Last updated