Leetcode 独一无二的出现次数

可以通过哈希集来判断是否独一无二,如果set中已经包含了count,那么set.add(count)会返回false

java 复制代码
class Solution {
    public boolean uniqueOccurrences(int[] arr) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < arr.length; i++) {
            map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
        }
        //然后创建一个set统计是否独一无二
        Set<Integer> set = new HashSet<>();
        for(int count : map.values()) {
            if(!set.add(count)) {
                return false;
            }
        }
        return true;
    }
}

map.values() 会返回这个 Map 中所有 value(值) 的一个Collection视图 ,也就是说,它返回的是所有"出现次数"组成的集合(但不是 Set,而是一个 Collection)。

举个例子:

java 复制代码
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 3);
map.put(2, 2);
map.put(3, 1);

Collection<Integer> values = map.values();
System.out.println(values);

输出结果为:

复制代码
[3, 2, 1]

注意几点:

  • map.values() 返回的是 Collection<Integer> 类型,不是 List 也不是 Set

  • 这个 Collection 是一个视图,和 Map 是关联的,如果你修改这个 CollectionMap 也会变;

  • 如果 map 中有重复的值,map.values() 也会反映出这些重复,例如:

    java 复制代码
    map.put(4, 3);

    此时 values 变为 [3, 2, 1, 3]

应用场景:

  • 如果你只是想遍历所有的 value,for (int v : map.values()) 是很常用的;
  • 如果你想判断这些 value 是否都不相同,通常会结合 Set 来做唯一性检查(如你这题中的场景)。
相关推荐
Ayanami_Reii1 分钟前
进阶数据结构应用-线段树扫描线
数据结构·算法·线段树·树状数组·离散化·fenwick tree·线段树扫描线
leoufung2 分钟前
LeetCode 98 Validate Binary Search Tree 深度解析
算法·leetcode·职场和发展
水木姚姚4 分钟前
C++ begin
开发语言·c++·算法
浅川.256 分钟前
xtuoj 素数个数
数据结构·算法
jyyyx的算法博客19 分钟前
LeetCode 面试题 16.18. 模式匹配
算法·leetcode
uuuuuuu30 分钟前
数组中的排序问题
算法
Stream33 分钟前
加密与签名技术之密钥派生与密码学随机数
后端·算法
Stream35 分钟前
加密与签名技术之哈希算法
后端·算法
少许极端1 小时前
算法奇妙屋(十五)-BFS解决边权为1的最短路径问题
数据结构·算法·bfs·宽度优先·队列·图解算法·边权为1的最短路径问题
机械电气电机杂谈1 小时前
电机热电偶原理与应用
职场和发展·创业创新·制造·学习方法·业界资讯