LeetCode1. 两数之和
题目
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
分析
本题目是经典哈希map使用的题目。
有关map的总结,见下图代码随想录的carl大佬图
本题不要求有序,所以使用unordered_map会快一些,但要注意向unordered_map插入数据的写法
代码
1 class Solution { 2 public: 3 vector<int> twoSum(vector<int>& nums, int target) { 4 unordered_map<int,int> m; 5 for(int i = 0;i < nums.size();i++){ 6 auto it = m.find(target - nums[i]); 7 if(it != m.end()){ 8 return {i,it->second}; 9 } 10 //m.insert(nums[i],i); 找不到成员函数,写法错误 11 //m[nums[i]] = i; 可以 12 //m.insert(pair<int,int> (nums[i],i)); 可以 13 //m.insert({nums[i],i});可以 14 } 15 return {}; 16 } 17 18 };
1 class Solution { 2 public: 3 vector<int> twoSum(vector<int>& nums, int target) { 4 unordered_map<int,int>mp; //这里key:nums[i],value:下标 5 for(int i = 0;i < nums.size();i++){ 6 int r = target - nums[i]; 7 if(mp.count(r)){ 8 //unordered_map中 find、count 查询的是主键 9 return {mp[r],i}; 10 } 11 mp[nums[i]] = i; 12 } 13 return {}; 14 } 15 };
C++ 有关map 的常用函数总结 https://www.cnblogs.com/fresh-coder/p/15945957.html