1、问题
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
2、示例
(1)
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
(2)
输入: nums = [1], k = 1
输出: [1]
3、实现思路
用map数据结构来记录数组中各项出现的次数,然后使用sort排序,通过slice删除数组中多于k的元素项
4、具体步骤
(1)创建集合去重,然后通过解构转为数组
(2)利用map和循环遍历,找到各项的出现频次
(3)利用sort排序,找到频次较高的项
(4)删除多余项( slice 获取开始删除位置之前的部分)
(5)返回
5、完整代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>前k个高频元素</title>
</head><body><p>给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。</p><p><p>输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]</p><p>输入: nums = [1], k = 1输出: [1]</p></p><p>用map数据结构来记录数组中各项出现的次数,然后使用sort排序,通过slice删除数组中多于k的元素项</p><script>let nums = [1,1,1,2,2,3], k = 2topKFrequent(nums, k)function topKFrequent(nums, k) {// 创建集合去重,然后通过解构转为数组let set = [...new Set(nums)]// 利用map和循环遍历,找到各项的出现频次let newMap = new Map()nums.forEach((item) =>{ if (newMap.has(item)) {// set方法设置键和值,利用get方法获取其中非重复项的频次newMap.set(item,newMap.get(item)+1)}else{newMap.set(item,1)}})// 利用sort排序,找到频次较高的项set.sort((a,b)=>newMap.get(b) - newMap.get(a))// 删除多余项( slice 获取开始删除位置之前的部分)set = set.slice(0, k)return set};</script>
</body></html>
6、力扣通过代码
/*** @param {number[]} nums* @param {number} k* @return {number[]}*/
var topKFrequent = function(nums, k) {// 创建集合去重,然后通过解构转为数组let set = [...new Set(nums)]// 利用map和循环遍历,找到各项的出现频次let newMap = new Map()nums.forEach((item) =>{ if (newMap.has(item)) {// set方法设置键和值,利用get方法获取其中非重复项的频次newMap.set(item,newMap.get(item)+1)}else{newMap.set(item,1)}})// 利用sort排序,找到频次较高的项set.sort((a,b)=>newMap.get(b) - newMap.get(a))// 删除多余项( slice 获取开始删除位置之前的部分)set = set.slice(0, k)return set};