当前位置: 首页 > news >正文

常用的排序算法------练习2

1. 题目

在这里插入图片描述

2. 思路和题解

这种题可以用桶排序来做,什么是桶排序呢?桶排序就是一种将待排序数据分到几个有序的桶里,每个桶里的数据再分别排序的排序算法。主要步骤如下:

  1. 确定桶的数量:根据待排序数据的情况确定桶的数量。一般来说,桶的数量可以设定为数据范围的长度除以每个桶的期望大小
  2. 将数据分配到桶中:遍历待排序的序列,根据每个元素的值将其分配到对应的桶中
  3. 对每个桶进行排序:可以使用其他排序算法(如插入排序)对每个桶中的数据进行排序
  4. 合并桶:将所有桶中的数据按顺序合并起来,得到已排序的序列

对于这道题来说,就可以构建一个List数组桶,然后依次num加入数组,如果出现的次数相同,那么就加到一个ArrayList中,然后再从后往前遍历桶,找出频率前k高的元素。
代码如下:

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i],map.getOrDefault(nums[i],0) + 1);
        }

        List<Integer>[] list = new List[nums.length + 1];
        for (Map.Entry<Integer,Integer> entry : map.entrySet()) {
            int num = entry.getKey(), count = entry.getValue();
            if (list[count] == null) {
                ArrayList temp = new ArrayList();
                temp.add(num);
                list[count] = temp; 
            }else {
                list[count].add(num);
            }
        }

        int[] result = new int[k];
        for (int i = list.length - 1,count = 0; i >=0 && count < k; i--) {
            while (list[i] != null && list[i].size() > 0 && count < k)   {
                result[count++] = list[i].remove(0);
            }
        }
        return result;
    }
}
http://www.dtcms.com/a/94457.html

相关文章:

  • JumpServer:一款企业级开源堡垒机
  • mapbox进阶,仿照百度,加载marker点位,移入marker点切换图标,点击展示气泡,气泡和marker联动
  • Ubuntu系统保姆级Paperless-ngx部署指南:零基础实现文档云端化管理
  • LeetCode 热题 100_爬楼梯(81_70_简单_C++)(动态规划)
  • SLAM文献之-NR-SLAM: Non-Rigid Monocular SLAM
  • 使用独立服务器的最佳方式指南
  • 【软件测试】一篇总结软件测试的基础知识
  • redis(主从复制)教程
  • 播放本地视频-实现视频画廊功能
  • @emotion/css + react+动态主题切换
  • Ubuntu-22.04安装ROS2
  • [GESP202503 C++一级题解]:B4258 : 四舍五入
  • 《一本书讲透Elasticsearch:原理、进阶与工程实践》读书笔记
  • 老外讲解用Delphi 12.3作web
  • Linux搭建NFS服务
  • GPIO输出实验,控制LED灯
  • 地图(死亡细胞)
  • 第六章 数学
  • Dynamic WallPaper-壁纸动态-Mac电脑-4K超高清
  • k8s 基础知识:Service + 负载均衡(下)
  • 【Django】教程-2-前端-目录结构介绍
  • 单细胞簇鉴定
  • ubuntu如何安装conda
  • 记录一次渗透测试/常用命令
  • 华为配置篇-ISIS基础实验
  • BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)
  • 【机器学习】——模型评估与选择
  • 【大模型基础_毛玉仁】4.5 实践与应用--参数高效微调PEFT
  • 6、进程理论和简单进程创建
  • WMS系统功能设计和源码实现(Java开发)