目录
2215 找出两数组的不同
1207 独一无二的出现次数
1657 确定两个字符串是否接近
2352 相等行列对
2215 找出两数组的不同
class Solution {
public:vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {unordered_set<int>set1,set2;for(int num : nums1)set1.insert(num);for(int num : nums2)set2.insert(num);vector<vector<int>> 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<int>& arr) {unordered_map<int,int>map;for(auto num : arr){map[num]++;}unordered_set<int>set;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) {vector<int>cnt1(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<vector<int>>& grid) {map<vector<int>,int>cnt;for(auto row : grid){cnt[row]++;}int res = 0;for(int i = 0;i < grid.size();i++){vector<int>arr;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)