问题链接:https://leetcode.com/problems/two-sum/
解法1:50ms
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> copy = nums;
quicksort(copy, 0, nums.size() - 1);
vector<int>::iterator index1 = copy.begin(), index2 = copy.end() - 1;
while ((*index1 + *index2 ) != target)
{
if ((*index1 + *index2) < target)
++index1;
if ((*index1 + *index2) > target)
--index2;
}
int value1 = *index1, value2 = *index2;
int i1 = 0, i2 = 0;
for (index1 = nums.begin();index1 != nums.end();++index1)
{
if (*index1 == value1 || *index1 == value2)
{
if (!i1)
i1 = index1 - nums.begin() + 1;
else
{
i2 = index1 - nums.begin() + 1;
break;
}
}
}
vector<int> result;
result.push_back(i1);
result.push_back(i2);
return result;
}
void quicksort(vector<int>& nums, int front, int behind)
{
int f = front + 1, b = behind, temp;
if (front >= behind)
return;
while (f != b)
{
if (nums[f] > nums[front])
{
temp = nums[f];
nums[f] = nums[b];
nums[b] = temp;
--b;
}
else
++f;
}
if (nums[f] > nums[front])
--f;
temp = nums[front];
nums[front] = nums[f];
nums[f] = temp;
quicksort(nums, front, f - 1);
quicksort(nums, f + 1, behind);
}
};
解法2:24ms
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> value_index;
vector<int> result;
map<int, int>::iterator iter;
int i = 0;
for (i = 0;i < nums.size();++i)
{
iter = value_index.find(target - nums[i]);
if (iter != value_index.end())
{
result.push_back(iter->second);
result.push_back(i + 1);
break;
}
else
value_index.insert(pair<int, int>(nums[i], i + 1));
}
return result;
}
};
解法3:12ms
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> copy = nums;
vector<int> result;
sort(copy.begin(), copy.end());
int f = 0, b = copy.size() - 1;
while ((copy[f] + copy[b]) != target)
{
if ((copy[f] + copy[b]) < target)
{
++f;
}
if ((copy[f] + copy[b] > target))
{
--b;
}
}
int i = 0, index1 = 0, index2 = 0;
for (i = 0;i < nums.size();++i)
{
if ((nums[i] == copy[f]) || nums[i] == copy[b])
{
if (!index1)
{
index1 = i + 1;
}
else
{
index2 = i + 1;
break;
}
}
}
result.push_back(index1);
result.push_back(index2);
return result;
}
};
原文:http://my.oschina.net/u/2313065/blog/523091