目录
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{};}
};