zoukankan      html  css  js  c++  java
  • 白菜刷LeetCode记-347. Top K Frequent Elements

    第五题,开始刷中等难度的题目,题目如下:

    按照题目,要求找出输入数组中前k个出险频率最高的数字,同时要求时间复杂度要比 O(n log n) 好。

    这题的难度主要是限定了时间的复杂度,这样的话,想到一个使用Map的方法,但是Map方法也需要对数组遍历一次,时间复杂度 O(n) 是否比 O(n log n) 好呢?

    下面贴出时间复杂度的排序(来源于《数据结构与算法经典问题解析》):

    OK,是可以使用这种方法的。

     1 /**
     2  * @param {number[]} nums
     3  * @param {number} k
     4  * @return {number[]}
     5  */
     6 var topKFrequent = function(nums, k) {
     7     var myMap = new Map();
     8     var res = new Array();
     9     var resnum = new Array();
    10     
    11     for(let i = 0 ; i < nums.length; i++){
    12         if(myMap.get(nums[i]) == undefined){
    13             myMap.set(nums[i],1);
    14         }else{
    15             myMap.set(nums[i], myMap.get(nums[i]) + 1);
    16         }
    17     }
    18     
    19     res = Array.from(myMap);
    20     
    21     res.sort((a, b) => b[1] - a[1]); 
    22     
    23     for(let i = 0 ; i < k ; i++){
    24         resnum.push(res[i][0]);
    25     }
    26     
    27     return resnum;  
    28     
    29 };

    这道题个人花时间比较长,主要原因还是对JavaScript库里头的数据结构方法的不熟练吧,例如在这道题之前,自己是不知道如何将Map转化为 Array的,通过查找 MDN,得知 Map.from 是可以做到将Map内容复制到Array里头。

  • 相关阅读:
    Linux软件管理
    Linux计划任务与进程管理
    PHP学习 Day_04
    Linux网络管理
    单播组播的实现
    Linux 下的tmpfs文件系统(/dev/shm)
    11.Linux date命令的用法
    Luogu P3783 [SDOI2017]天才黑客
    Luogu P3768 简单的数学题
    Luogu P2336 [SCOI2012]喵星球上的点名
  • 原文地址:https://www.cnblogs.com/sssysukww/p/9554696.html
Copyright © 2011-2022 走看看