1认识哈希表
set
set是一个集合,里面放的元素只能是一个key
三种类型
set
multiset
unordered_set
map
key–value
键值对存储是map
242.
使用s[i]-‘a’ 对字母进行统计
再对要查的反向处理一遍
最后遍历s[i]如果有不等于0 那就不是
349.
使用urordered_set进行去重
然后使用交集思想
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;//结果数组
unordered_set<int> nums_set(nums1.begin(),nums1.end());
//把nums1去重到numset里
for(int num:nums2){
//找nums2和那个去重numset里出现的元素
if (nums_set.find(num) != nums_set.end()) {
//找到出现的元素,加入
//s.find(key)!=s.end 就是说找到数字,等式成立
//找到末尾都找不到 那就是=end 条件不成立
result_set.insert(num);
}
}
return vector<int>(result_set.begin(), result_set.end());
//返回的是一个vector数组
}
};
202 快乐数
class Solution {
public:
int getSum(int n) {
int sum = 0;
while (n) {
sum += (n % 10) * (n % 10);
//模10取低位然后平方
n /= 10;
//除10取高位
}
return sum;
};
bool isHappy(int n) {
unordered_set<int> set;
//去重数组
while(1) {
int sum = getSum(n);
//获取处理过后的数
if (sum == 1) {
return true;
}
// 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return false
if (set.find(sum) != set.end()) {
//找到了,等式成立,返回失败
return false;
} else {
set.insert(sum);
}
n = sum;
}
}
};
1.两数之和
好像拉链的感觉
使用map键值对
auto iter 是迭代器
map。find()返回的也是迭代器
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++) {
// 定义迭代器 找配对
auto iter = map.find(target - nums[i]);
// 如果 条件为真 那就是找到了
if(iter != map.end()) {
return {iter->second, i};
//first 是键值 second是数值
//返回 target-nums[i]对应的下标值
//第一遍就是 2,0 第二遍 9-7=2 存在 那么久已经返回了
}
// 如果没找到匹配对,就把访问过的元素和下标加入到map中
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
};