哈希表01
哈希表: 哈希碰撞 拉链法 线性探测法 常见的三种哈希结构
242. 有效的字母异位词
只有字母,可以用长度为26的定长数组表示。
class Solution {
public:
bool isAnagram(string s, string t) {
array<int, 26> cnt_s{}, cnt_t{};
for(char c: s)
{
cnt_s[c - 'a']++;
}
for(char c: t)
{
cnt_t[c - 'a']++;
}
return cnt_s == cnt_t;
}
};
349. 两个数组的交集
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;
unordered_set<int> nums1_set(nums1.begin(), nums1.end());
for(int &num2: nums2)
{
if(nums1_set.find(num2) != nums1_set.end())
{
result_set.insert(num2);
}
}
return vector<int>(result_set.begin(), result_set.end());
}
};
202. 快乐数
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> hst;
while(n != 1)
{
int cnt = 0;
while(n > 0)
{
cnt += pow(n % 10, 2);
n /= 10;
}
if(hst.find(cnt) != hst.end())
{
return false;
}
hst.insert(cnt);
n = cnt;
}
return true;
}
};
1. 两数之和
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map <int,int> map;
for(int i = 0; i < nums.size(); i++) {
// 遍历当前元素,并在map中寻找是否有匹配的key
auto iter = map.find(target - nums[i]);
if(iter != map.end()) {
return {iter->second, i};
}
// 如果没找到匹配对,就把访问过的元素和下标加入到map中
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
};

浙公网安备 33010602011771号