【代码随想录】day6

day6 哈希表1

哈希表理论

哈希表一般用来快速判断一个元素是否出现集合里,时间复杂度为O(1),用空间换时间。

242.有效的字母异位词

class Solution {
public:
    bool isAnagram(string s, string t) {
        vector<int> vmap(30);
        for (char ch: s) {
            vmap[ch - 'a'] ++;
        }
        for (char ch: t) {
            vmap[ch - 'a'] --;
        }
        for (int num: vmap) {
            if (num != 0) {
                return false;
            }
        }
        return true;
    }
};

349. 两个数组的交集

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> uset;
        unordered_set<int> res;
        for (int num: nums1) {
            uset.insert(num);
        }
        for (int num: nums2) {
            if (find(uset.begin(), uset.end(), num) != uset.end()) {
                res.insert(num);
            }
        }
        return vector<int>(res.begin(), res.end());
    }
};

202. 快乐数

class Solution {
public:
    int getNum(int n) {
        int res = 0;
        while (n) {
            int num = n % 10;
            res += num * num;
            n /= 10;
        }
        return res;
    }

    bool isHappy(int n) {
        unordered_set<int> uset;
        uset.insert(n);
        while (n!= 1) {
            n = getNum(n);
            if (find(uset.begin(), uset.end(), n) != uset.end()) {
                return false;
            }
            uset.insert(n);
        }
        return true;
    }
};

1. 两数之和

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> umap;
        for (int i = 0; i < nums.size(); i ++) {
            if (umap.find(target - nums[i]) != umap.end()) {
                return vector<int>({i, umap[target - nums[i]]});
            }
            else {
                umap[nums[i]] = i;
            }
        }
        return vector<int>({-1, -1});
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容