哈希表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 {};
    }
};
posted @ 2025-07-02 19:37  skyler886  阅读(8)  评论(0)    收藏  举报