class Solution {
public:
struct pair
{
int data;
int idx;
bool operator< (const pair& rhs) const
{
return data < rhs.data;
}
};
vector<int> twoSum(vector<int> &numbers, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> res;
vector<pair> seq(numbers.size());
for (int i = 0; i < numbers.size(); ++i)
{
seq[i].data = numbers[i];
seq[i].idx = i;
}
sort(seq.begin(), seq.end());
int i = 0;
int j = seq.size() - 1;
while (i < j)
{
if (seq[i].data + seq[j].data > target)
--j;
else if (seq[i].data + seq[j].data < target)
++i;
else
{
int minIdx = min(seq[i].idx, seq[j].idx) + 1;
int maxIdx = max(seq[i].idx, seq[j].idx) + 1;
res.push_back(minIdx);
res.push_back(maxIdx);
return res;
}
}
return res;
}
};