美文网首页
哈希表 05

哈希表 05

作者: 眼若繁星丶 | 来源:发表于2020-10-28 20:57 被阅读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));
        }
    }
    

    相关文章

      网友评论

          本文标题:哈希表 05

          本文链接:https://www.haomeiwen.com/subject/mhgcvktx.html