首页 > 其他分享 >347. 前 K 个高频元素

347. 前 K 个高频元素

时间:2023-04-29 09:33:29浏览次数:43  
标签:hashMap nums int 元素 ++ 347 new 高频 public

347. 前 K 个高频元素

public class topK {
//// 第一种方法,需要对所有的数据进行排序 时间复杂度n*logn
//    public static int[] topKFrequent(int[] nums, int k) {
//        HashMap<Integer, Integer> hashMap = new HashMap<>();
//
//        for (int i = 0; i < nums.length; i++) {
//            hashMap.put(nums[i],hashMap.getOrDefault(nums[i],0)+1);
//        }
//
//        Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet();
//        ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<>(entries);
//
//        list.sort(new Comparator<Map.Entry<Integer, Integer>>() {
//            @Override
//            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
//                return o2.getValue()-o1.getValue();
//            }
//        });
//
//        int[] result = new int[k];
//        for (int i = 0; i < k; i++) {
//            result[i] = list.get(i).getKey();
//        }
//        return result;
//    }

    // 维护一个长度为k优先队列,每次只排序k个数  时间复杂度是n*logk
    // 小顶堆实现,过程是每次加进来一个新值,和当前K个值做比较,把最小的运送到堆顶,并弹出。(主要求前K大的数要把大的留下,
    // 小的弹走,留下的就是topK)
    public static int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            hashMap.put(nums[i],hashMap.getOrDefault(nums[i],0)+1);
        }

        // 后元素减前面
        Comparator<Map.Entry<Integer, Integer>> comparator = new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o2.getValue()-o1.getValue();
            }
        };


        PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>(comparator);

        for(Map.Entry<Integer, Integer> entry:hashMap.entrySet()){
            queue.add(entry);
        }
        int[] ans = new int[k];
        for (int i = 0; i < k; i++) {
            ans[i] = queue.poll().getKey();
        }
        return ans;
    }

    public static void main(String[] args) {
        int[] nums = {1,1,1,2,2,3};
        int k = 2;
        int[] frequent = topKFrequent(nums, k);
        for (int i = 0; i < frequent.length; i++) {
            System.out.println(frequent[i]);
        }
    }

}

参考:https://www.bilibili.com/video/BV1Xg41167Lz/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a208d3946b1598

标签:hashMap,nums,int,元素,++,347,new,高频,public
From: https://www.cnblogs.com/chenyi502/p/17363582.html

相关文章

  • 1572. 矩阵对角线元素的和
     分析:找了一个小规律首先对角线上的数是从第一行到最后一行按顺序的在每一行上下标逐渐加1,最后总次数是矩阵的长度最重要的是,两个对角线是对称的也就是当取前面的第一个数时,后面对角线就是-1;前面取第二个时,后面就是-2然后有个细节,当行数为奇数时需要减去一个正中间的数,重......
  • 剑指 Offer II 083. 没有重复元素集合的全排列
     分析:今天看的明日一练,这道题有点忘了怎么做了先偷个懒,用了个全排列函数,后面再研究代码:1classSolution(object):2defpermute(self,nums):3"""4:typenums:List[int]5:rtype:List[List[int]]6"""7returnlis......
  • Java高频面试题和答案
    一、Java基础篇Object有哪些常用方法?大致说一下每个方法的含义Java创建对象有几种方式?获取一个类对象的方式有哪些?ArrayList和LinkedList的区别有哪些?用过ArrayList吗?说一下它有什么特点?有数组了为什么还要搞个ArrayList呢?说说什么是fail-fast?Hashtable与HashMap的区......
  • 父元素设置相对定位和overflow:hidden会清除子元素绝对定位的脱离文档流效果
     当父元素同时设置相对定位和overflow:hidden时会使得子元素的绝对定位的脱离文档流效果失效。原因:绝对定位会根据最近的设置了绝对定位或相对定位的祖先元素进行定位,绝对定位会使得元素脱离文档流,但这里overflow:hidden会消除脱离文档流的效果,导致了son在设置了绝对定位后依然......
  • Vue3+typescript如何给元素添加一个Ctrl+s的事件,用于保存文件?
    如下代码,建议用这个,e.keyCode已经过时,后面都是用e.key:string.onMounted(()=>{window.addEventListener('keydown',(e)=>{if(e.ctrlKey&&e.key==='s'){//检查是否按下了Ctrl+Se.preventDefault();//阻止默认行为(保存网页)con......
  • ts文件可以操控vue文件里面的ref元素吗
    ts文件可以操控vue文件里面的ref元素吗exportconstfileInputElement=ref<null|HTMLElement>(null);我在ts文件里获得fileInputElement我能操控vue文件里ref为fileInputElement的元素吗import{messagesRef,}from"@/core/helpers/chat";exportconstmessagesRef......
  • [ MySQL开发高频面试]VARCHAR(50)中的50到底是能存50个字还是50个字节?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"!作者:李辉|慕课网讲师了解MySQL的数据类型是开发人员在使用MySQL数据库的时候,必备的基础技能之一。也正因为此,这部分知识也是面试官面试的时候屡屡提及的高频问题,所以尽量不要在这个地方栽跟头。今天......
  • CSS3弹性盒子用于子元素填充父元素
    主要记住三个关键点父元素display设置为flex,表明该容器是弹性盒子,设置flex-flow指明弹性方向,子元素设置flex属性,指定弹性比例 CSS3弹性盒子|菜鸟教程(runoob.com)......
  • asp.net com,未能转换为类型库。类型库导出程序在处理,时遇到了错误。错误: 找不到元
    我把[assembly:ComVisible(true)]这个设置为true,就报下边的错误错误:程序集“D:\MyDocuments\VisualStudio2005\Projects\ClientOperation\active\bin\Debug\active.dll”未能转换为类型库。类型库导出程序在处理“active.myControl,active”时遇到......
  • python+playwright 学习-57 svg 元素拖拽
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。本篇讲下关于svg元素的拖拽相关操作。拖拽svg元素如图所示,svg下的circle元素是可以拖动的比如往右拖动100个像素,那么cx的值由原来的cx="100"变成......