**242.有效的字母异位词 **
leetcode链接:https://leetcode.cn/problems/valid-anagram/
题目描述:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
核心思路:主要考察哈希表的数组用法以及ascii码的认识。

点击查看代码
class Solution {
public:
    bool isAnagram(string s, string t) {
        int result[26] = {0};
        for(int i = 0;i < s.size();i++){
            result[s[i] - 'a']++;
        }
        for(int i = 0;i < t.size();i++){
            result[t[i] - 'a']--;
        }
        for(int i = 0;i < 26;i++){//这里应该是完整字母表的长度
            if(result[i] != 0){
                return false;
            }
        }
        return true;
    }
};
**349. 两个数组的交集 ** leetcode链接:https://leetcode.cn/problems/intersection-of-two-arrays/description/ 题目描述:给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 核心思路:哈希数组法或者哈希set(集合)。当数据量大时,不能使用数组,因为空间浪费很大,当考虑查询速度时,使用数组,因为集合映射时需要计算。
点击查看代码
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result;
        unordered_set<int> set_nums(nums1.begin(),nums1.end());
        for(int num : nums2){
            if(set_nums.find(num) != set_nums.end()){
                result.insert(num);
            }
        }
        return vector<int>(result.begin(),result.end());
    }
};
**第202题. 快乐数** leetcode链接:https://leetcode.cn/problems/happy-number/description/ 题目描述:编写一个算法来判断一个数 n 是不是快乐数。对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。 核心思路:题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。
点击查看代码
class Solution {
public:
    int getSum(int n){
        int sum = 0;
        while(n){
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }

    bool isHappy(int n) {
        unordered_set<int> result;
        while(1){
            int sum = getSum(n);
            if(sum == 1){
                return true;
            }
            else if(result.find(sum) != result.end()){
                return false;
            }
            else{
                result.insert(sum);
            }
            n = sum;//更新n的值
        }
    }
};
**1. 两数之和** leetcode链接:https://leetcode.cn/problems/two-sum/ 题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 核心思路:暴力法或者哈希表
点击查看代码
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]);//find查询的是键,用值作键位,索引作值位。
            if(iter != map.end()){
                return {iter->second,i};//iter->second返回的是kv中的value;
            }
            map.insert(pair<int,int>(nums[i],i)); //创建的map本质上是pair<int,int>类型,所以操作时也要相同类型
        }
        return {};
    }
};