给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
示例 1:
输入:arr = [1,2,2,1,1,3]
输出:true
解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
来源:力扣(LeetCode)
方法一:
先用一个HashMap来存储每个元素出现的次数;再用一个HashSet来存储HashMap里各个键值出现的次数。如果HashMap和HashSet的size一样,说明各个键值出现的次数都不一样。
class Solution {
public boolean uniqueOccurrences(int[] arr) {
HashMap<Integer,Integer>hm=new HashMap<>();
for(int i=0;i<arr.length;i++){
hm.put(arr[i],hm.getOrDefault(arr[i],0)+1);
}
HashSet<Integer> set=new HashSet<>();
for(int m:hm.keySet()){
set.add(hm.get(m));
}
return set.size()==hm.size();
}
}
方法二:
先对数组排序再遍历数组,每次碰到不一样的就把count值放入HashSet,没有添加成功就返回false
class Solution {
public boolean uniqueOccurrences(int[] arr) {
Arrays.sort(arr);
HashSet<Integer>set=new HashSet<>();
int count=1;
for(int i=1;i<arr.length;i++){
if(arr[i]==arr[i-1]){
count++;
}else{
if(!set.add(count)){
return false;
}
count=1;
}
}
if(!set.add(count))
return false;
return true;
}
}