开始刷LeetCode
刷完换工作!!!
先排序后左右搜索
struct Element
{
int iNumber;
int iIndex;
};
bool compareFunc(const Element& arg1, const Element& arg2)
{
return arg1.iNumber<arg2.iNumber;
}
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector<int> results;
vector<Element> vInput;
vector<int>::iterator itv = numbers.begin();
int i =0;
Element temp;
while(itv!=numbers.end())
{
temp.iNumber = *itv;
temp.iIndex = ++i;
vInput.push_back(temp);
}
sort(vInput.begin(),vInput.end(),compareFunc);
vector<Element>::iterator itv1 = vInput.begin();
vector<Element>::iterator itv2 = vInput.end();
itv2--;
while(itv1<=itv2 && itv1->iNumber + itv2->iNumber!=target)
{
if(itv1->iNumber+itv2->iNumber<target)
itv1++;
if(itv1->iNumber+itv2->iNumber>target)
itv2--;
}
if(itv1->iNumber + itv2->iNumber== target)
{
if(itv1->iIndex<itv2->iIndex)
{
results.push_back(itv1->iIndex);
results.push_back(itv2->iIndex);
}
else
{
results.push_back(itv2->iIndex);
results.push_back(itv1->iIndex);
}
}
return results;
}
};