哈希表 05

2020-10-28  本文已影响0人  眼若繁星丶

哈希表 05


LeetCode 1207

原题链接

哈希表

设置一个哈希表,key为数组的元素值,value为该key值在数组中出现的次数。

然后设置HashSet集合把出现的次数去重,对比去重前后的数据长度就可得是否满足题意。

代码如下:

public class Solution {

    public boolean uniqueOccurrences(int[] arr) {
        // key是数组元素值,value是该值出现的次数
        Map<Integer, Integer> count = new HashMap<Integer, Integer>();
        for (int num : arr) {
            // 遍历数组,记录每个值出现的次数
            count.put(num, count.getOrDefault(num, 0) + 1);
        }
        // 一个是keySet,一个是HashSet,用于出现次数去重
        Set<Integer> key = count.keySet();
        Set<Integer> countSet = new HashSet<Integer>();
        for (Integer k : key) {
            countSet.add(count.get(k));
        }
        // 最终判断去重后是否和非去重的个数相等,即没被去重
        return count.size() == countSet.size();
    }

    public static void main(String[] args) {
        Solution s = new Solution();
        int[] arr = {-3, 0, 1, -3, 1, 1, 1, -3, 10, 0};
        System.out.println(s.uniqueOccurrences(arr));
    }
}

下面为简洁的代码:

public class Solution {
    public boolean uniqueOccurrences(int[] arr) {
        Map<Integer, Integer> count = new HashMap<Integer, Integer>();
        for (int num : arr) {
            count.put(num, count.getOrDefault(num, 0) + 1);
        }
        // Map的values方法,可以返回Collection接口,里面存HashMap里的value值
        return count.size() == new HashSet<Integer>(count.values()).size();
    }

    public static void main(String[] args) {
        Solution s = new Solution();
        int[] arr = {-3, 0, 1, -3, 1, 1, 1, -3, 10, 0};
        System.out.println(s.uniqueOccurrences(arr));
    }
}
上一篇下一篇

猜你喜欢

热点阅读