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 来做唯一性检查(如你这题中的场景)。
相关推荐
zhuzhuxia⌓‿⌓10 分钟前
线性表的顺序和链式存储
数据结构·c++·算法
未知陨落30 分钟前
LeetCode:95.编辑距离
算法·leetcode
杨小码不BUG1 小时前
小鱼的数字游戏:C++实现与算法分析(洛谷P1427)
c++·算法·数组·信奥赛·csp-j/s
高山有多高1 小时前
栈:“后进先出” 的艺术,撑起程序世界的底层骨架
c语言·开发语言·数据结构·c++·算法
YouEmbedded1 小时前
解码查找算法与哈希表
数据结构·算法·二分查找·散列表·散列查找·线性查找
greentea_20132 小时前
Codeforces Round 65 C. Round Table Knights(71)
c语言·开发语言·算法
小秋学嵌入式-不读研版2 小时前
C61-结构体数组
c语言·开发语言·数据结构·笔记·算法
可触的未来,发芽的智生2 小时前
触摸未来2025.10.04:当神经网络拥有了内在记忆……
人工智能·python·神经网络·算法·架构
与己斗其乐无穷2 小时前
刷题记录(11)map和set的简单使用
算法
夜月yeyue3 小时前
个人写HTOS移植shell
c++·mcu·算法·性能优化·架构·mfc