目录
1、两数之和 - 哈希表
1、两数之和 - 哈希表
1. 两数之和
思路:
建立map,mp[nums[i]]=i 存储值所对应的下标
顺序遍历每一个元素,先查找mp中是否存在与nums[i]匹配的值(target-nums[i])
如果存在,则返回【i,匹配值下标i】
否则将该nums[i]存入map中
为什么先查找,再存哈希表?
因为题目要求,数组中同一元素不能重复出现,所以当遍历到自己时,先查找之前有没有存在的匹配值,再进行存储,这样避免了匹配到自己的情况
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> mp = new HashMap<>();
for(int i=0; i < nums.length; i++ )
{
int t = target - nums[i];
if(mp.containsKey(t)) return new int[] {mp.get(t),i};
mp.put(nums[i],i);
}
return new int[] {};
}
}
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n=nums.size();
map<int,int> mp;
for(int i=0;i<n;i++)
{
int t=target-nums[i];
if(mp.find(t)!=mp.end())
return {i,mp.find(t)->second};
mp[nums[i]]=i;
}
return{};
}
};