算法15(力扣347)——前k个高频元素

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、完整代码

html 复制代码
<!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、力扣通过代码

javascript 复制代码
/**
 * @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
      
      
};
相关推荐
用户48221371677533 分钟前
Python——正则表达式(字符匹配-贪婪模式)
算法
二向箔reverse38 分钟前
经典算法题解析:从思路到实现,掌握核心编程思维
算法
天一生水water1 小时前
聚类的肘部法则原理
算法·支持向量机·聚类
Lenyiin1 小时前
《LeetCode 热题 100》整整 100 题量大管饱题解套餐 中
java·c++·python·leetcode·面试·刷题·lenyiin
蒟蒻小袁2 小时前
力扣面试150题--颠倒二进制位
java·算法·leetcode
boyedu2 小时前
比特币区块链共识算法:数字世界的信任密码
算法·区块链·共识算法·数字货币·加密货币·虚拟货币
pk_xz1234562 小时前
社区资源媒体管理系统设计与实现
网络·python·深度学习·算法·数据挖掘·媒体
2 小时前
LeetCode Hot 100 括号生成
算法·leetcode·职场和发展
逝雪Yuki2 小时前
Leetcode——42. 接雨水
c++·算法·leetcode·双指针·接雨水
香蕉可乐荷包蛋2 小时前
排序算法 (Sorting Algorithms)-JS示例
javascript·算法·排序算法