解题思路:左右两个游标,从最小和最大数之和开始判断,当两个游标卡住目标target时即为所求之值。
#include <iostream>
#include <algorithm>#include <vector>
using namespace std;
class Solution{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> num = nums;
vector<int> dest;
sort(num.begin(),num.end());
int leftFlag = 0;
int rightFlag = num.size()-1;
while((num[leftFlag]+num[rightFlag])!=target)
{
if(num[leftFlag]+num[rightFlag]<target)
{
leftFlag++;
}
else if(num[leftFlag]+num[rightFlag]>target)
{
rightFlag--;
}
else if(num[leftFlag]+num[rightFlag]==target)
{
break;
}
}
int i=0;
for(;i!= nums.size(); i++)
{
if( nums[i] == num[leftFlag])
dest.push_back(i);
else if( nums[i] == num[rightFlag])
dest.push_back(i);
}
return dest;
}
};
int main()
{
int a[] = {1,2,3,4,5,6,7,8};
Solution solu;
vector<int> srcNum(a,a+8);
vector<int> queueNum;
queueNum = solu.twoSum(srcNum,13);
vector<int>::iterator iter;
for(iter = queueNum.begin();iter!= queueNum.end(); iter++)
{
cout<<*iter<<" ";
}
return 0;
}