LeetCode75| 哈希表/哈希集合

目录

2215 找出两数组的不同

1207 独一无二的出现次数

1657 确定两个字符串是否接近

2352 相等行列对


2215 找出两数组的不同

class Solution {
public:
    vector> findDifference(vector& nums1, vector& nums2) {
        unordered_setset1,set2;
        for(int num : nums1)set1.insert(num);
        for(int num : nums2)set2.insert(num);
        vector> res(2);
        for(int num : set1){
            if(!set2.count(num)){
                res[0].push_back(num);
            }
        }
        for(int num : set2){
            if(!set1.count(num)){
                res[1].push_back(num);
            }
        }
        return res;
    }
};

时间复杂度O(n + m)

空间复杂度O(n + m)

1207 独一无二的出现次数

set.size()代表每个数的出现次数的种类 

map.size()代表数的种类

只需要判断map.size()与set.size()是否相等即可 

class Solution {
public:
    bool uniqueOccurrences(vector& arr) {
        unordered_mapmap;
        for(auto num : arr){
            map[num]++;
        }
        unordered_setset;
        for(auto o : map){
            set.insert(o.second);
        }
        return set.size() == map.size();
    }
};

时间复杂度O(n)

空间复杂度O(n)

1657 确定两个字符串是否接近

记录两个单词中各个字符出现的次数后,对次数进行排列

class Solution {
public:
    bool closeStrings(string word1, string word2) {
        vectorcnt1(26),cnt2(26);
        for(auto ch : word1){
            cnt1[ch - 'a']++;
        }
        for(auto ch : word2){
            cnt2[ch - 'a']++;
        }
        for(int i = 0;i < 26;i++){
            if(cnt1[i] == 0 && cnt2[i] != 0 || cnt2[i] == 0 && cnt1[i] != 0)return false;
        }
        sort(cnt1.begin(),cnt1.end());
        sort(cnt2.begin(),cnt2.end());
        return cnt1 == cnt2;
    }
};

时间复杂度O(max(n,m) + ClogC)//遍历+排序 C为26

空间复杂度O(C)

2352 相等行列对

 用哈希表统计行出现的次数,然后累加出列,查找哈希表中列出现的次数

class Solution {
public:
    int equalPairs(vector>& grid) {
        map,int>cnt;
        for(auto row : grid){
            cnt[row]++;
        }
        int res = 0;
        for(int i = 0;i < grid.size();i++){
            vectorarr;
            for(int j = 0;j < grid[i].size();j++){
                arr.push_back(grid[j][i]);
            }
            if(cnt.find(arr) != cnt.end()){
                res += cnt[arr];
            }
        }
        return res;
    }
};

时间复杂度O(n^2)

空间复杂度O(n^2)

你可能感兴趣的:(#,LeetCode,算法)