题目描述
给你一个整数数组 arr
,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true
;否则返回 false
。
示例 1:
输入:arr = [1,2,2,1,1,3]
输出:true
解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
解题思路
1、首先需要对数组进行排序;
2、遍历排序后的数组,统计每个数字出现的频次。使用一个set保持出现过的频次,一旦发现有重复的频次,则返回false。如果都不重复,则返回true;
代码
bool uniqueOccurrences(vector<int>& arr) {
if(arr.empty()) return true;
sort(arr.begin(), arr.end());
set<int> counts;
int last = arr.at(0);
int count = 1;
for(int i=1; i!=arr.size(); i++) {
if(arr.at(i) == last) {
count++;
}else {
if(counts.count(count)) {
return false;
}else {
counts.insert(count);
}
count = 1;
last = arr.at(i);
}
}
// remember the last element
if(counts.count(count)) {
return false;
}
return true;
}