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

发布于:2025-02-11 ⋅ 阅读:(10) ⋅ 点赞:(0)

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
      
      
};


网站公告

今日签到

点亮在社区的每一天
去签到