2021年1月5日更新
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
// 每个键值对中,第一个元素(键)存储的是元素的值,
// 第二个元素(值)存储的是元素在数组中的下标。
unordered_map<int, int> m;
for (int i = 0; i < nums.size(); i++)
{
auto iter = m.find(target - nums[i]);
// 如果和当前元素“互补”的元素出现在了map中
if(iter != m.end())
{
// 就返回当前元素的下标和map中对应键值对的值(互补元素的下标)
return { iter->second, i };
}
//如果和当前元素“互补”的元素没有出现在map中
else
{
// 就把当前元素(键)及其下标(值)加入到map中
m[nums[i]] = i;
}
}
return {};
}
};
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int l = nums.size();
int i, j;
int f = 0;
for (i = 0; i < l; i++)
{
for (j = 0; j < l; j++)
{
if (i == j)
{
continue;
}
if (nums.at(i) + nums.at(j) == target)
{
f = 1;
break;
}
}
if (1 == f)
{
break;
}
}
vector<int> r;
r.push_back(i);
r.push_back(j);
return r;
}
};
使用了哈希表的解法。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashtable;
for (int i = 0; i < nums.size(); i++)
{
auto it = hashtable.find(target - nums[i]);
if (it != hashtable.end())
{
return { it->second, i };
}
else
{
hashtable[nums[i]] = i;
}
}
return {};
}
};