刷LeetCode hot100--1.哈希表
哈希表--查找一个元素在不在数组/map/set中
目前用到的数据结构:
std::unordered_set | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) |
std::unordered_map | 哈希表 | key无序 | key不可重复 | key不可修改 | O(1) | O(1) |
1. 两数之和 - 力扣(LeetCode)
30min+
几个问题
1.原来想的是两个数都在哈希表里,如果两个数重了怎么办
--->因为总能找到解,而又不会矛盾,所以可能出现3,3,但不会出现3,3,3
--->那么重复怎么处理,你不要一开始就让所有元素插入unodered_map,遍历nums中数据,把nums[i]前面的插进map, 即3,3,这中情况,后一个3没有插入map,前一个3插进去了
2.map的一些操作注意事项
--->构造函数:
//默认构造
std::map<int, std::string> myMap; // 创建一个空的map,键类型为int,值类型为std::string
--->插入
mapStu.insert(std::pair<int, std::string>(3, "小张"));
--->对某键值的修改
mapStu[3] = "小刘";
--->查找【aoto好用,自己分析是什么类型】
// 使用find查找键3
auto it = mapStu.find(3);
if (it != mapStu.end()) { // 键存在,修改其对应的值 it->second = "小刘";
} else { // 键不存在,可以选择插入新的键值对 mapStu[3] = "小刘";
}
it->second就是键为3的元素的值的引用
--->map操作手册见:C++之STL整理(3)之map 用法(创建、赋值、方法)整理_c++ map初始化-CSDN博客
3.代码
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {//能想到暴力和哈希//但是哈希怎么做来着//元素重复怎么办unordered_map<int,int>map;for(int i = 0;i<nums.size();i++){auto iter = map.find(target-nums[i]);if(iter != map.end()){return{iter->second,i};}map.insert(pair<int,int>(nums[i],i));} return {};}
};