【灵神题单·贪心】1481. 不同整数的最少数目 | 频率排序贪心 | Java

🔗 题目链接:1481. 不同整数的最少数目

📚 所属题单:灵茶山艾府 · 贪心算法题单 --- §1.1 从最小/最大开始贪心

🏷️ 难度:Medium | 难度分:1284

🔖 标签:贪心、哈希表、排序

📖 题目描述

给你一个整数数组 arr 和一个整数 k。从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目

示例 1

复制代码
输入:arr = [5,5,4], k = 1
输出:1
解释:移除 1 个 4,数组中只剩下 5 一种整数。

示例 2

复制代码
输入:arr = [4,3,1,1,3,3,2], k = 3
输出:2
解释:移除 4、2 和一个 1,剩下 1 和 3 两种整数。

提示

  • 1 <= arr.length <= 10^5
  • 1 <= arr[i] <= 10^9
  • 0 <= k <= arr.length

💡 思路分析

要让剩余的不同整数种类最少 → 尽可能多消灭整数种类 → 优先干掉出现次数最少的

想象你在整理书架,要丢掉 k 本书让品种最少。肯定先丢只有 1 本的那个品种,再丢只有 2 本的...... 这样最快清掉一个品种 📚

算法步骤

  1. 统计频率:用 HashMap 记录每个数出现几次
  2. 频率排序:从小到大排
  3. 贪心删除:从频率最小的开始扣减 k,k 够就整个消灭

✅ 代码实现(Java)

java 复制代码
class Solution {
    public int findLeastNumOfUniqueInts(int[] arr, int k) {
        Map<Integer, Integer> freq = new HashMap<>();
        for (int x : arr) {
            freq.merge(x, 1, Integer::sum);
        }
        List<Integer> counts = new ArrayList<>(freq.values());
        Collections.sort(counts);
        int removed = 0;
        for (int i = 0; i < counts.size(); i++) {
            if (k >= counts.get(i)) {
                k -= counts.get(i);
                removed++;
            } else {
                break;
            }
        }
        return counts.size() - removed;
    }
}

📊 复杂度分析

复杂度 说明
⏱️ 时间 O(n log n) 频率排序
💾 空间 O(n) 哈希表

🔗 参考

📚 和 3545 是镜像题------那道是"删字符使种类 ≤ k",这道是"删 k 个使种类最少"。核心一样:频率排序 + 从最少的开始动手。

相关推荐
彧azz8 小时前
Java学习语法篇:变量
java·学习
繁星蓝雨9 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J9 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
杜大哥9 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python
wuyk5559 小时前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)
开发语言·爬虫·python
信誓旦旦的程序猿9 小时前
【量化系统从零构建 #04】存储设计:选型·建库·交易日历
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
yurenpai(27届找实习中)9 小时前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18
shmily麻瓜小菜鸡10 小时前
JS/TS 易踩坑知识点 — 模块化与工程化类
开发语言·javascript·ecmascript
geovindu10 小时前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
Flynt10 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端