Java | Leetcode Java题解之第347题前K个高频元素

news2024/11/18 4:41:38

题目:

题解:

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> occurrences = new HashMap<Integer, Integer>();
        for (int num : nums) {
            occurrences.put(num, occurrences.getOrDefault(num, 0) + 1);
        }
        // 获取每个数字出现次数
        List<int[]> values = new ArrayList<int[]>();
        for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()) {
            int num = entry.getKey(), count = entry.getValue();
            values.add(new int[]{num, count});
        }
        int[] ret = new int[k];
        qsort(values, 0, values.size() - 1, ret, 0, k);
        return ret;
    }

    public void qsort(List<int[]> values, int start, int end, int[] ret, int retIndex, int k) {
        int picked = (int) (Math.random() * (end - start + 1)) + start;
        Collections.swap(values, picked, start);
        
        int pivot = values.get(start)[1];
        int index = start;
        for (int i = start + 1; i <= end; i++) {
            // 使用双指针把不小于基准值的元素放到左边,
            // 小于基准值的元素放到右边
            if (values.get(i)[1] >= pivot) {
                Collections.swap(values, index + 1, i);
                index++;
            }
        }
        Collections.swap(values, start, index);

        if (k <= index - start) {
            // 前 k 大的值在左侧的子数组里
            qsort(values, start, index - 1, ret, retIndex, k);
        } else {
            // 前 k 大的值等于左侧的子数组全部元素
            // 加上右侧子数组中前 k - (index - start + 1) 大的值
            for (int i = start; i <= index; i++) {
                ret[retIndex++] = values.get(i)[0];
            }
            if (k > index - start + 1) {
                qsort(values, index + 1, end, ret, retIndex, k - (index - start + 1));
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【layui】layer弹出图片层(开启图片旋转 放大 缩小 还原)

详细参照layui官网组件 弹出层组件 &#x1f525;Photots —————————————————————————— 弹出图片层&#xff08;开启图片旋转 放大 缩小 还原&#xff09;是layui2.8.16的新增功能&#xff0c; 新增 photos 层的鼠标滚轮缩放功能 是layui2.8.16的新增…

8.17模拟赛题解

先考虑空间能不能把N个座位放好 最优的方式就是挨着摆放 那么一排能摆放QL/x的商个椅子 &#xff0c;然后计算摆放完N个座位需要多少排&#xff0c;N/Q 向上取整 计算所需要的排总共占据多宽&#xff0c;讨论有没有超过W&#xff0c;然后讨论剩余空间还能放几条走廊 如果走廊数…

蚓链数字化营销:连接心灵的新桥梁

在当今数字化浪潮汹涌的时代&#xff0c;营销领域也经历了一场深刻的变革。蚓链数字化营销&#xff0c;已不仅仅是一种推广手段&#xff0c;更是连接品牌与消费者心灵的新桥梁&#xff0c;让每一次互动都充满温度与价值。 曾经&#xff0c;品牌与消费者之间的沟通隔着一层厚厚…

小白零基础学数学建模系列-Day8-多目标规划问题与案例实践

文章目录 1. 引言1.1 优化问题的背景1.2 单目标规划与多目标规划的概述 2. 单目标规划2.1 定义2.2 应用场景2.3 求解方法2.4 案例&#xff1a;制造企业生产成本最小化的优化方案2.4.1 案例背景2.4.2 模型建立2.4.3 模型求解2.4.4 结果分析2.4.5 总结 3. 多目标规划3.1 定义3.2 …

【MySQL进阶之路】数据库的操作

目录 创建数据库 字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定字符集和校验规则 在配置文件中配置 查看数据库 显示创建语句 修改数据库 删除数据库 数据库的备份和恢复 备份整个数据库 备份特定表 备份多个数据库 备份所有数据…

无人机测绘技术及应前景详解

无人机测绘技术是一种将无人机技术、遥感技术、地理信息系统&#xff08;GIS&#xff09;和计算机技术相结合&#xff0c;对自然地理要素或地表人工设施的形状、大小、空间位置及其属性等进行测定、采集并绘制成图的技术。它利用高精度传感器&#xff08;如激光雷达、航拍相机等…

遗传进化算法进行高效特征选择

在构建机器学习模型时&#xff0c;特征选择是一个关键的预处理步骤。使用全部特征往往会导致过拟合、增加计算复杂度等问题。因此&#xff0c;我们需要从原始特征集中选择一个最优子集&#xff0c;以提高模型的泛化性能和效率。 特征选择的目标是找到一个二元掩码向量&#xf…

液相色谱仪仪器校准怎么做?具体校准方法是什么?

液相色谱法概述 液相色谱仪是由输液系统、进样系统、分离系统、检测系统和数据处理系统等部分组成的分析仪器。液相色谱仪是根据样品之中各组分在色谱柱中的固定相和流动相间的分布或吸附特性的差异&#xff0c;流动相将样品带入色谱柱进行分离。由检测器检测&#xff0c;并由…

Java 和 .NET Core 在企业级应用开发中各有什么优势和劣势?看看AI是怎么回答的

Java 和 .NET Core 在企业级应用开发中各有什么优势和劣势&#xff1f;看看AI是怎么回答的 1.kimi 网址&#xff1a;https://kimi.moonshot.cn/ Kimi是北京月之暗面科技有限公司于2023年10月9日推出的一款智能助手&#xff0c;主要应用场景为专业学术论文的翻译和理解、辅助分析…

python基础语法 010 类和对象-6-1 继承定义

前提&#xff1a; 在真实世界中&#xff0c;类型之间可能存在范围包含关系&#xff0c;比如&#xff1a;人这个类型和亚洲人这个类型。 人是包括了亚洲人的&#xff0c;如果某人是员工亚洲人&#xff0c;那么它必定是一个人 这种关系&#xff0c;在编程语言中称为继承关系 比如…

Java Web|day5.MyBatis

MyBatis 定义 它是一款半自动的ORM持久层框架&#xff0c;具有较高的SQL灵活性&#xff0c;支持高级映射(一对一&#xff0c;一对多)&#xff0c;动态SQL&#xff0c;延迟加载和缓存等特性&#xff0c;但它的数据库无关性较低 **ORM: **Object Relation Mapping&#xff0c;…

数据库调优的流程及参考参数

1.数据库调优的流程&#xff1a; 1.1.调优思考流程&#xff1a; 1.对数据库进行调优的时候&#xff0c;我们可以依据以下步骤进行思考&#xff1a; 整个流程划分成了观察 (Show status) 和行动 (Action) 两个部分。字母 S 的部分代表观察&#xff08;会使用相应的分析工具&am…

全自由度控制八极电磁铁-吴贤铭智能工程学院案例

根据客户需求&#xff0c;上海天端实业有限公司设计八极电磁铁方案 八极电磁铁产品说明 八极电磁铁可在空间内部产生方向及强度可控的均匀磁场或梯度磁场&#xff0c;八组磁极以空间极轴布置&#xff0c;每组磁极可独立控制&#xff0c;磁场空间300mm直径球域。 八极电磁铁电…

electron 官网速通

前言&#xff1a;参考Electron 中文网。 核心知识点&#xff1a;有哪些进程&#xff0c;进程之间的通信&#xff0c;electron API 分类及怎么调用。 一、快速开始 1. 新建一个 my-electron 的文件夹。 2. 运行 npm init 创建 package.json 文件。 3. 填写 author 和 descr…

【Python-办公自动化】1秒提取多个word表格汇总至1个excel内

欢迎来到"花花 Show Python",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。 自我介绍: 我热衷于将复杂的技术概念以简单易懂…

苹果上架没有iphone、没有ipad也可以生成截屏

使用flutter、uniapp或其他跨平台框架开发ios的APP&#xff0c;上架的时候都会遇到一个问题&#xff0c;上架的时候需要各种尺寸的设备来做ios截屏。 比如目前最新的要求是&#xff0c;iphone需要三种不同尺寸的设备的截屏&#xff0c;假如支持ipad则还需要使用ipad 2代和ipad…

linux常用命令学习-ls命令

1.1 ls 命令 命令功能&#xff1a;查看文件信息。 在 ubuntu 上&#xff0c;一般都使用 ls 命令来查看文件信息&#xff0c;ls ,是 list 这个单词的缩写。在当前目录下输入 ls 命令&#xff0c;这样就会列出当前路径下的全部文件&#xff0c;例如我们要查看桌面上的文件&#x…

什么是硬件在环仿真?

硬件在环Hardware-in-the-loop&#xff08;HIL&#xff09;仿真是一种实时仿真。您可以使用HIL模拟来测试您的控制器设计。HIL模拟显示了控制器如何实时响应逼真的虚拟刺激。您还可以使用HIL来确定您的物理系统&#xff08;设备&#xff09;模型是否有效。 在HIL模拟中&#xf…

代码随想录训练营 Day34打卡 动态规划 part02 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树

代码随想录训练营 Day34打卡 动态规划 part02 一、力扣62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Fini…

5.vue中axios封装工程化

vue工程化中axios封装 视频演示地址&#xff1a;https://www.bilibili.com/video/BV121egeQEHg/?vd_source0f4eae2845bd3b24b877e4586ffda69a 通常我们封装需要封装request.js基础的发送请求工具类&#xff0c;再根据业务封装service类&#xff0c;service类是具体业务的接口…