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 = 2
topKFrequent(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
};