算法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
      
      
};
相关推荐
木井巳11 小时前
【递归算法】二叉搜索树中第K小的元素
java·算法·leetcode·深度优先·剪枝
铉铉这波能秀11 小时前
LeetCode Hot100 中 enumerate 函数的妙用(2026.2月版)
数据结构·python·算法·leetcode·职场和发展·开发
墨有66611 小时前
哈希表从入门到实现,一篇吃透!
数据结构·算法·哈希算法
南极星100511 小时前
我的创作纪念日--128天
java·python·opencv·职场和发展
We་ct11 小时前
LeetCode 228. 汇总区间:解题思路+代码详解
前端·算法·leetcode·typescript
AIpanda88811 小时前
如何借助AI销冠系统提升数字员工在销售中的成效?
算法
啊阿狸不会拉杆11 小时前
《机器学习导论》第 7 章-聚类
数据结构·人工智能·python·算法·机器学习·数据挖掘·聚类
木非哲12 小时前
机器学习--从“三个臭皮匠”到 XGBoost:揭秘 Boosting 算法的“填坑”艺术
算法·机器学习·boosting
小辉同志12 小时前
437. 路径总和 III
算法·深度优先·广度优先
笨笨阿库娅12 小时前
从零开始的算法基础学习
学习·算法