LeetCode——1207.独一无二的出现次数

85 阅读2分钟

独一无二的出现次数

1.题目链接

1207. 独一无二的出现次数

2.原题描述:

给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。

如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false

3.相关算法

哈希表:

使用哈希表统计每个数的出现次数,然后再用一个哈希表存储出现次数,如果出现次数有重复,则返回false,否则返回true。

桶排序:

由于数组中的数的范围比较小,所以可以使用桶排序统计每个数的出现次数,然后再用一个桶存储出现次数,如果出现次数有重复,则返回false,否则返回true。

4.本题主要思路

本题主要讲解哈希表的解题思路,先创建一个哈希表用于统计数组中每个数出现的次数,再创建一个set集合来存放所有数字出现的次数,最后通过比较哈希表的数量与set去重之后的数量进行比较,若相等则返回true,否则返回false。

5.源码分析

class Solution {
    public boolean uniqueOccurrences(int[] arr) {
        Map<Integer,Integer> map = new HashMap<>();				// 1
        for(int x : arr){										
            map.put(x,map.getOrDefault(x, 0) + 1);				// 2
        }
        Set<Integer> set = new HashSet<>();					// 3
        int cnt = map.size();							// 4
        for (Map.Entry<Integer, Integer> x : map.entrySet()) {	
            set.add(x.getValue());						// 5
        }
        return set.size()==cnt;							// 6
    }
}
  1. 创建哈希表,用于存放每个数字以及出现的次数;
  2. 遍历数组,将每个数字以及出现的次数存放到哈希表中;
  3. 创建set集合,用于存放哈希表中每个数字出现的次数;
  4. 记录哈希表中元素的数量;
  5. 将哈希表中记录的次数存放到set集合中进行去重(也可以记性重复性判断,当以经有相等的次数时可以直接返回,本文采用了一种节省代码,但费时的解法);
  6. 判断set集合中的元素数量是否等于哈希表中的数量,若不相等,则set去重了,表示有相同次数的返回false,反之返回true。