题目
思路
方法一:暴力解。先用size()求出数组长度,遍历两个for找出和为target的数组下标。如果找不到则返回{}。
方法二:哈希表。时间复杂度更低,但自己想不到。用unordered_map,与map的区别是unordered_map 容器不会像 map 容器那样对存储的数据进行排序。创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。
代码(暴力解)
cpp
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n=nums.size();
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(nums[i]+nums[j]==target)
{
return {i,j};
}
}
}
return {};
}
};
代码(哈希)
cpp
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int>table;
for(int i=0;i<nums.size();i++)
{
auto it=table.find(target-nums[i]);
if(it!=table.end())
{
return {it->second,i};
}
table[nums[i]]=i;
}
return {};
}
};