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 来做唯一性检查(如你这题中的场景)。
相关推荐
啦啦啦啦啦zzzz7 小时前
算法:贪心算法
c++·算法·leetcode·贪心算法
清泓y8 小时前
RAG 技术
算法·ai
阿慧今天瘦了嘛8 小时前
计算机组成原理概述:从硬件到软件的桥梁
计算机网络·算法
网站优化(SEO)专家9 小时前
SEO核心算法拆解:网站排名快速提升的武林秘籍!
算法·搜索引擎·网站排名·核心算法
惊讶的猫9 小时前
CLGSI
人工智能·算法·机器学习
ysa05103010 小时前
【板子】二分答案(最大最小?)
c++·笔记·算法·板子
科技之门10 小时前
百公里管网漏损分级定位实战方案2026
前端·人工智能·算法
木木子2211 小时前
# 猜数字游戏 — HarmonyOS交互逻辑与随机算法实现
算法·游戏·华为·交互·harmonyos
stolentime11 小时前
SP8549 MAIN75 - BST again题解
c++·算法·二叉树·深度优先·图论·记忆化搜索·组合数学
stolentime11 小时前
AT_pakencamp_2020_day1_k Gcd of Sum题解
c++·算法