前 K 个高频元素(leetcode 347)

71 阅读1分钟

题目描述

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

 

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:

示例二:

输入: nums = [1], k = 1
输出: [1]

思路

  1. 将数组中每个元素 以及 每个元素出现的频率记录下来
  2. 记录下来之后,对结果根据元素出现的频率进行降序排序
  3. 前K个元素返回

代码

var topKFrequent = function(nums, k) {
     let map=new Map(),result=[];

     //将数组中的每个元素和它的频率映射在map结构中
     for(let i=0;i<nums.length;i++){
         if(map.has(nums[i])){
             let index=map.get(nums[i]);
             map.set(nums[i],++index);
              
         }else{
             map.set(nums[i],1);
         }
         
     }

    // 对map结构进行排序
     let myArray=Array.from(map);
     myArray.sort((a,b)=>{
         return b[1]-a[1];
     })

    // 组装最后的结果
     myArray.slice(0,k).forEach((item,index)=>{
         result.push(item[0])
     })
    
    // 返回结果
    return result;
};

结果

image.png