哈希表理论基础

有效的字母异位词

力扣——有效的字母异位词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool isAnagram(string s, string t) {
int letterCount[26] = {0};
for(int i=0;i<s.size();i++){
letterCount[s[i]-'a'] ++;
}
for(int i=0;i<t.size();i++){
letterCount[t[i]-'a'] --;
}
bool res = true;
for(int i=0;i<26;i++){
if(letterCount[i] != 0){
res = false;
}
}
return res;
}

两个数组的交集

力扣——两个数组的交集

1
2
3
4
5
6
7
8
9
10
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> res;
unordered_set<int> num1Set(nums1.begin(),nums1.end());
for(int i=0;i<nums2.size();i++){
if(num1Set.find(nums2[i]) != num1Set.end()){
res.insert(nums2[i]);
}
}
return vector<int>(res.begin(),res.end());
}

快乐数

力扣——快乐数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int getSum(int n){
int res = 0;
while(n){
res += (n%10)*(n%10);
n /= 10;
}
return res;
}
bool isHappy(int n) {
unordered_set<int> record;
while(1){
int num = getSum(n);
if(num == 1){
return true;
}
if(record.find(num) != record.end()){
return false;
}
else{
record.insert(num);
}
n=num;
}
}

两数之和

力扣——两数之和

1
2
3
4
5
6
7
8
9
10
11
12
vector<int> twoSum(vector<int>& nums, int target) 
{
unordered_map<int,int> record;
for(int i=0;i<nums.size();i++){
auto it = record.find(target-nums[i]);
if(it != record.end()){
return {it->second,i};
}
record.insert(pair<int,int>(nums[i],i));
}
return {};
}

四数相加II

赎金信

三数之和

四数之和

总结