解题思路
对数组排序,用双指针记录每个元素出现的次数,存入容器
对容器排序,比较两两元素是否相等
C++代码
class Solution {
public:
bool uniqueOccurrences(vector<int>& arr) {
if (arr.size() < 2) return true;
sort(begin(arr), end(arr));
vector<int> cnt;
int p = 0, q = 1;
while (q < arr.size()) {
if (arr[p] == arr[q])
q++;
else {
cnt.emplace_back(q - p);
p = q++;
}
if (q == arr.size())
cnt.emplace_back(q - p);
}
sort(begin(cnt), end(cnt));
for (int i = 0; i < cnt.size() - 1; i++) {
if (cnt[i] == cnt[i+1]) return false;
}
return true;
}
};
解题思路2
使用HashMap,存储每个数字出现的次数,然后比较有无重复
Java代码
class Solution {
public boolean uniqueOccurrences(int[] arr) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++)
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
return map.size() == new HashSet<>(map.values()).size();
}
}