class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
vector<int> copy = numbers;
sort(numbers.begin(),numbers.end());
for(int i=0;i<numbers.size();i++){
int index = binaryfind(numbers, target - numbers[i]);
// cout<<index<<" "<<i<<" ";
if(index!=-1 && index!=i) {
// cout<<"jin";
// return {i,index};
vector<int> res;
for(int j=0;j<numbers.size();j++) {
// for(auto a : res) {
// cout<<a<<" ";
// }
if(copy[j] == numbers[index] || copy[j] ==numbers[i]) {
res.emplace_back(j+1);
}
if(res.size()==2) {
return res;
}
}
}
}
return {};
}
int binaryfind(vector<int>& numbers , int target) {
// 左闭右开
int left =0;
int right = numbers.size();
// 那么结束的条件就是 left=right
while(left<right) {
int mid = left + (right-left)/2;
int value = numbers[mid];
if(target==value){
return mid;
} else if(target>value) {
left = mid+1;
} else if(target<value) {
right=mid;
}
}
return -1;
}
};