概述
独一无二的出现次数
给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-number-of-occurrences/
整体思路:
哈希表(unordered_map)+容器(vector)
(1)遍历arr,把元素和元素出现次数加入哈希表(unordered_map)中
(2)遍历unordered_map,把元素次数放到容器(vector)中
(3)调用sort函数排序
(4)遍历排序后的容器(vector),判断相邻位置是否相同
代码:
class Solution {
public:
bool uniqueOccurrences(vector<int>& arr) {
unordered_map<int, int> figure_hash;
for (int &i : arr) {//遍历,并插入
figure_hash[i]++;
}
vector<int> figure_vec;
for (auto& p : figure_hash) {
figure_vec.emplace_back(p.second);
}
sort(figure_vec.begin(), figure_vec.end());//排序
for (int n = 0; n < figure_vec.size()-1; n++) {
if (figure_vec[n] == figure_vec[n + 1]) return false;
}
return true;
}
};
官方解法:
unordered_map+unordered_set
就是在插入unordered_map后,遍历unordered_map将unordered_map的value值放入unordered_set中,因为unordered_set不能存放相同的key,所以最后判断unordered_set的大小是否等于unordered_map的大小即可,效率比我的高很多
代码:
class Solution {
public:
bool uniqueOccurrences(vector<int>& arr) {
unordered_map<int, int> occur;
for (const auto& x: arr) {
occur[x]++;
}
unordered_set<int> times;
for (const auto& x: occur) {
times.insert(x.second);
}
return times.size() == occur.size();
}
};
复杂度分析
时间复杂度:O(N)
空间复杂度:O(N)。
最后
以上就是优雅鼠标为你收集整理的C++每日一练11-独一无二的出现次数的全部内容,希望文章能够帮你解决C++每日一练11-独一无二的出现次数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复