Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
思路1:利用哈希表。
Solution:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> num_id;
for (int i = 0; i < nums.size(); i++) {
num_id[nums[i]] = i;
}
for (int i = 0; i < nums.size(); i++) {
int dif = target - nums[i];
auto dif_id = num_id.find(dif);
if (dif_id != num_id.end() && dif_id->second != i)
return vector<int>{i, dif_id->second};
}
return vector<int>();
}
性能:
Runtime: 8 ms??Memory Usage: 10.5 MB
思路2:对数组排序
Solution:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> num, res;
int n = nums.size();
num = nums;
sort(nums.begin(), nums.end());
int begin = 0, end = n - 1;
while (begin < end) {
int sum = nums[begin] + nums[end];
if (sum < target) begin++;
else if (sum > target) end--;
else
{
for (int i = 0; i < n; i++) {
if (num[i] == nums[begin]) {
res.push_back(i);
break;
}
}
for (int i = 0; i < n; i++) {
if (num[i] == nums[end] && i != res[0]) {
res.push_back(i);
break;
}
}
return res;
}
}
return res;
}
性能:
Runtime: 8 ms??Memory Usage: 9.5 MB
原文:https://www.cnblogs.com/dysjtu1995/p/11477017.html