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 来做唯一性检查(如你这题中的场景)。
相关推荐
hans汉斯9 分钟前
【人工智能与机器人研究】基于力传感器坐标系预标定的重力补偿算法
人工智能·算法·机器人·信号处理·深度神经网络
vortex52 小时前
算法设计与分析:分治、动态规划与贪心算法的异同与选择
算法·贪心算法·动态规划
前端拿破轮2 小时前
🤡🤡🤡面试官:就你这还每天刷leetcode?连四数相加和四数之和都分不清!
算法·leetcode·面试
地平线开发者3 小时前
征程 6|工具链量化简介与代码实操
算法·自动驾驶
DoraBigHead3 小时前
🧠 小哆啦解题记——谁偷改了狗狗的台词?
算法
Kaltistss3 小时前
240.搜索二维矩阵Ⅱ
线性代数·算法·矩阵
轻语呢喃3 小时前
每日LeetCode:合并两个有序数组
javascript·算法
大熊猫侯佩3 小时前
Swift 数学计算:用 Accelerate 框架让性能“加速吃鸡”
算法·swift
杰克尼4 小时前
2. 两数相加
算法
无聊的小坏坏4 小时前
单调栈通关指南:从力扣 84 到力扣 42
c++·算法·leetcode