算法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
      
      
};
相关推荐
算AI8 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
hyshhhh9 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
杉之10 小时前
选择排序笔记
java·算法·排序算法
Naive_710 小时前
蓝桥杯准备(前缀和差分)
java·职场和发展·蓝桥杯
烂蜻蜓11 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法
OYangxf11 小时前
图论----拓扑排序
算法·图论
我要昵称干什么11 小时前
基于S函数的simulink仿真
人工智能·算法
AndrewHZ11 小时前
【图像处理基石】什么是tone mapping?
图像处理·人工智能·算法·计算机视觉·hdr
念九_ysl11 小时前
基数排序算法解析与TypeScript实现
前端·算法·typescript·排序算法
守正出琦11 小时前
日期类的实现
数据结构·c++·算法