1207. 独一无二的出现次数

题目:给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
解法一-哈希表法
思路:用map1存每个数组元素及其出现的次数(其中把元素作为key,次数作为value),而map2把map1中的value作为key,把map1中的key作为value,用以判断是否出现重复的次数。
代码:
class Solution {
public boolean uniqueOccurrences(int[] arr) {
int len = arr.length;
HashMap<Integer,Integer> map1 = new HashMap(len);
HashMap<Integer,Integer> map2 = new HashMap(len);
map1.put(arr[0],1);
for(int i=1;i<len;i++){
if(map1.containsKey(arr[i])){
map1.put(arr[i],map1.get(arr[i])+1); //原来的value+1
} else{
map1.put(arr[i],1);
}
}

    for(Integer key : map1.keySet()){
        if(map2.containsKey(map1.get(key))){
            return false;
        }
        map2.put(map1.get(key),key);
    }
    return true;
}

}
注意点:map有三种遍历方式:1、map.entrySet()获取键值对列表,有getValue和getKey方法;2、map.values()获取value集合;3、map.keySet()获取key集合;并通过key获取对应value的值

简化版
思路:用map1存每个数组元素及其出现的次数(其中把元素作为key,次数作为value),用set存map1中的value,最后判断map和set的大小是否相等。
代码:class Solution {
public boolean uniqueOccurrences(int[] arr) {
int len = arr.length;
HashMap<Integer,Integer> map1 = new HashMap(len);
for(int i=0;i<len;i++){
map1.put(arr[i],map1.getOrDefault(arr[i],0)+1); //getOrDefault:如果key对应的value有值,则返回value,如果没有就返回默认值
}
Set set = new HashSet(); //利用set.add方法不允许对象重复的特点
for(Integer key : map1.keySet()){
set.add(map1.get(key));
}
return map1.size()==set.size();
}
}

posted @ 2020-10-28 14:37  for_ward  阅读(71)  评论(0)    收藏  举报