此题可以先排序,采取以空间换时间的方法,其时间复杂度为O(nlogn)。
解法如下:
class Solution {
public:
vector twoSum(vector& nums, int target) {
vector indices;
vector numstemp = nums;
sort(numstemp.begin(), numstemp.end());
int i, j = numstemp.size() - 1,index1,index2;
for (i = 0; i < j; i++)
{
while (numstemp[i] + numstemp[j] > target)
{
j–;
}
if (i < j)
{
if (numstemp[i] + numstemp[j] == target)
{
for (int k = 0; k < nums.size(); k++)
{
if (numstemp[i] == nums[k])
{
index1 = k;
break;
}
}
for (int k = 0; k < nums.size(); k++)
{
if (k == index1)
{
continue;
}
if (numstemp[j] == nums[k])
{
index2 = k;
break;
}
}
if (index1 < index2)
{
indices.push_back(index1);
indices.push_back(index2);
}
else
{
indices.push_back(index2);
indices.push_back(index1);
}
}
}
}
return indices;
}
};