方法一:两遍哈希表
函数代码一:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++)
{
m[nums[i]]=i;
}
for(int i=0;i<nums.size();i++)
{
//存在索引值覆盖问题,比如nums[7]=42,nums[9]=42,结果后面的索引9会去覆盖前面的7索引的值
//比如42+42=84,返回{7,9}
if(m.find(target-nums[i])!=m.end()&&m[target-nums[i]]!=i)
{
return {i,m[target-nums[i]]};
}
}
return {};
}
};
方法二:一遍哈希
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int>m;
for(int i=0;i<nums.size();i++)
{
if(m.find(target-nums[i])!=m.end()&&m[nums[i]]!=i)
{
return {m[target-nums[i]],i};
}
m[nums[i]]=i;
}
return {};
}
};
方法三:暴力法+双指针
方法四:二分查找