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

devtools/2025/2/12 9:53:45/

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


http://www.ppmy.cn/devtools/158173.html

相关文章

https的论述

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是HTTP协议的安全版本&#xff0c;用于保护数据传输的安全性和完整性。在HTTPS中&#xff0c;通过使用SSL&#xff08;Secure Socket Layer&#xff09;或TLS&#xff08;Transport Layer Security&#xff09…

python2048游戏

实现了一个完整的2048游戏&#xff0c;并将其展示在一个图形化界面上。具体功能包括&#xff1a; 初始化游戏板&#xff1a;创建一个4x4的二维列表&#xff0c;表示游戏板&#xff0c;并在初始状态下随机放置两个数字&#xff08;通常是2或4&#xff09;。绘制游戏板&#xff…

8.flask+websocket

http是短连接&#xff0c;无状态的。 websocket是长连接&#xff0c;有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…

玩转工厂模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 什么是工厂模式?工厂方法模式适合应用场景实现方式工厂方法模式优缺点什么是工厂模式? 工厂方法模式是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。…

Visual Studio 使用 “Ctrl + /”键设置注释和取消注释

问题&#xff1a;在默认的Visual Studio中&#xff0c;选择单行代码后&#xff0c;按下Ctrl /键会将代码注释掉&#xff0c;但再次按下Ctrl /键时&#xff0c;会进行双重注释&#xff0c;这不是我们想要的。 实现效果&#xff1a;当按下Ctrl /键会将代码注释掉&#xff0c;…

嵌入式系统开发中的图形后台(graphical backend)是什么意思?

图形后台的概述 “图形后台”是指在计算机系统中负责管理和渲染图形界面&#xff08;GUI&#xff09;的程序或系统。 在嵌入式设备上&#xff0c;图形系统的选择通常包括以下几种主要类型&#xff1a; X11&#xff08;X Window System&#xff09;&#xff1a; 这是一个传统的…

Goland 内存逃逸问题

内存逃逸是什么&#xff1f; 在go语言中&#xff0c;内存分配存在两个方式&#xff1a;堆分配&#xff1b;栈分配。 栈分配&#xff1a;是在函数调用时为局部变量分配内存&#xff0c;当函数返回时&#xff0c;这些内存会自动释放。 堆分配&#xff1a;通过 new 或者 make 函…

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…