class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
map<int,priority_queue<int,vector<int>,greater<int> > > mp;
for(int i = 0;i < numbers.size();++i)
mp[numbers[i]].push(i + 1);
sort(numbers.begin(),numbers.end());
for(int i = 0,j = numbers.size() - 1;i < numbers.size() && j > i;){
if((numbers[i] + numbers[j]) == target){
if(mp[numbers[i]].top() < mp[numbers[j]].top())
return vector<int>{mp[numbers[i]].top(),mp[numbers[j]].top()};
else if(mp[numbers[i]].top() == mp[numbers[j]].top()){
int first = mp[numbers[i]].top();
mp[numbers[i]].pop();
return vector<int>{first,mp[numbers[j]].top()};
}
else
return vector<int>{mp[numbers[j]].top(),mp[numbers[i]].top()};
}
else if(numbers[i] + numbers[j] > target)
--j;
else
++i;
}
return vector<int>{};
}
};