字节青训-查找热点数据问题
问题描述
给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率前 k 高的元素。请按升序排列。
- 1 <= nums.length <= 10^5
- k 的取值范围是 [1, 数组中不相同的元素的个数]
- 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的
你所设计算法的时间复杂度必须优于 O(n log n),其中 n 是数组大小。
测试样例
样例1:
输入:
nums = [1, 1, 1, 2, 2, 3], k = 2
输出:[1,2]样例2:
输入:
nums = [1], k = 1
输出:[1]样例3:
输入:
nums = [4, 4, 4, 2, 2, 2, 3, 3, 1], k = 2
输出:[2,4]
解题思路:
用一个去重的数组对每一个出现的数字计数然后按顺序得出前n个数字就行
数据结构:
具体来说,用unordered_map 记录每个数字的频率。
然后将map中的数据添加到 vector 向量中。
接着是排序: 使用 sort 函数对 result 向量进行排序,排序依据是元素的频率(降序)。
输出格式的转换:
构建返回字符串: 遍历排序后的 result 向量的前 k 个元素,将它们转换为字符串并使用逗号分隔,
存储在 stringstream 中。
返回结果: 将 stringstream 中的内容转换为字符串并返回。
算法步骤
- 频率计数:使用
Counter统计每个元素的出现频率。 - 选择前
k个高频元素:- 一种方法是使用最小堆(min-heap)来维护当前的前
k个高频元素。这样可以在O(n log k)的时间复杂度内完成。 - 另一种方法是使用快速选择算法(Quickselect)来找到第
k个高频元素,然后提取前k个高频元素。这种方法的平均时间复杂度是O(n)。
- 一种方法是使用最小堆(min-heap)来维护当前的前
- 排序:最后,对前
k个高频元素按元素值进行升序排序。
C++代码如下:
#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>
#include <sstream>
#include <algorithm> using namespace std; string topKFrequent(vector<int>& nums, int k) { // 使用哈希表记录每个元素的频率 unordered_map<int, int> freqMap; for (int num : nums) { freqMap[num]++; } vector<pair<int,int>> result;for(auto x : freqMap){result.push_back(x);}sort(result.begin(), result.end(), [](const pair<int, int>& a, const pair<int, int>& b) {return a.second > b.second;});stringstream ss;for (size_t i = 0; i < k; ++i) { ss << result[i].first; if (i < k - 1) { ss << ","; } }return ss.str();
} int main() {// You can add more test cases herestd::vector<int> nums1 = {1, 1, 1, 2, 2, 3};std::vector<int> nums2 = {1};//cout << topKFrequent(nums1, 2) << endl;std::cout << (topKFrequent(nums1, 2) == "1,2") << std::endl;std::cout << (topKFrequent(nums2, 1) == "1") << std::endl;return 0;
}
Python代码如下:
from collections import Counterdef solution(nums, k):# 使用Counter记录每个元素的频率freq_map = Counter(nums)# 将频率map转化为列表,并先按频率降序,再按元素值升序排序result = sorted(freq_map.items(), key=lambda x: (-x[1], x[0]))# 获取频率最高的前k个元素top_k = [result[i][0] for i in range(k)]return top_kif __name__ == "__main__":# 测试用例nums1 = [1, 1, 1, 2, 2, 3]nums2 = [1]nums3 = [4, 4, 4, 2, 2, 2, 3, 3, 1]# 输出测试结果print(solution(nums1, 2) == [1, 2]) # 输出: Trueprint(solution(nums2, 1) == [1]) # 输出: Trueprint(solution(nums3, 2) == [2, 4]) # 输出: True
通过咯,感觉这个困难题的难度一般,主要是输出的格式需要自己去转换

这么一看python这么短,真是派派又森森呀~
相关文章:
字节青训-查找热点数据问题
问题描述 给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率前 k 高的元素。请按升序排列。 1 < nums.length < 10^5k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合…...
Codeforces Round 981 (Div. 3) (A~F)
文章目录 A. Sakurako and Kosuke思路code B. Sakurako and Water思路code C. Sakurakos Field Trip思路code D. Kousukes Assignment思路code E. Sakurako, Kosuke, and the Permutation思路code F. Kosukes Sloth思路code Codeforces Round 981 (Div. 3) A. Sakurako and Ko…...
shell脚本实例(4)while实现1+...+100,linux新增用户
while实现1到100求和 #!/bin/bash/ s0 i1 #-le小于等于 while [ $i -le 100 ] dos$[ $s$i ]i$[ $i1 ] done echo $s echo $i 执行结果如下 修改用户名密码脚本 #!/bin/bash/ #提示用户输入用户名 read -p "请输入用户名:"username useradd $username #提…...
docker XML详解
下列为一个基本的运行docker镜像文件 {"Id": "62a82b0e69930e54c291095f632adde58dd0b247adba3a048385a55c87e38eba","Created": "2024-07-11T04:00:09.36091853Z","Path": "java","Args": ["-ja…...
web前端边框详解,弹性盒子的使用(仿写购物网页)
边框详解 1. 边框宽度(border - width) - 具体取值:可以是具体的长度值,如 px (像素)、 pt (点)、 em (相对单位)等。例如, border - width: 2px…...
【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024)
在线投稿:学术会议-学术交流征稿-学术会议在线-艾思科蓝 2024年计算机视觉与艺术国际学术会议(CVA 2024)作为2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI 2024)的分会。此次大会旨在汇聚全球在计算机视觉与艺术…...
认识软件测试
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. 什么是测试? 测试在⽣活中处处可⻅ 例子: 对某款购物软件进⾏测试 启动测试:点击软件图标&#…...
poi处理excel文档时,与lombok的@Accessors(chain = true)注解冲突
poi在反射封装数据时会判断set方法的返回是不是Void,加上Accessors会造成NoSuchMethodException异常...
我接触csdn中的c++的时间
大家好,我是AC使者,不知不觉我也来到CSDN半年了!在这半年我也看到了自身的不足,我也还有了很多粉丝,所以我今天来总结一下这半年的东西。 第一篇--------结构体数组 关于结构体数组的理解-CSDN博客 第二篇--------字…...
go语言多态性(接口interface)的使用
前言 在Go语言中,接口类型(interface)完全可以作为一个函数的参数。这是Go语言多态性的一个重要体现,允许函数接受任何实现了接口中定义的方法的类型的实例。 一、接口(interface)定义 type Reader inte…...
如何将markdown文件转换为pdf
最近笔者在用vscode写markdown,但是提交时往往需要交pdf。所以就涉及到如何将markdown转化为pdf格式。 首先,需要在vscode上安装插件 markdown Preview Enhanced 之后在vscode的右上角即可看到下述图标,点击,vscode右半面就会显示…...
【python实操】python小程序之测试报告
引言 python小程序之测试报告 文章目录 引言一、测试报告1.1 概念1.1.1 使用Pytest和Allure生成测试报告1.1.2 使用unittest和HTMLTestRunner生成测试报告1.1.3 总结 1.2 题目1.3 代码1.3 代码解释 二、思考 一、测试报告 1.1 概念 python生成测试报告,常用的方法包…...
【Java基础】2、Java基础语法
f2/fnf2:选中点中的文件名 1.注释 为什么要有注释? 给别人和以后的自己可以看懂的解释 注释含义 注释是在程序指定位置的说明性信息;简单理解,就是对代码的一种解释 注释分类 单行注释 //注释信息 多行注释…...
MATLAB基础应用精讲-【数模应用】本量利分析(Cost-Volume-Profit Analysis)
目录 前言 几个高频面试题目 本量利分析与量本利分析的区别 算法原理 发展历程 几个相关概念 什么是CVP分析 基本假设 注意事项 本量利分析的作用 基本原理 多种产品量本利分析 盈亏平衡分析 目标利润分析 敏感性分析 边际分析 本量利分析基本模型 应用场景 …...
实习冲刺Day7
算法题 合并两个有序链表 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for (int i 0; i<n; i) {nums1[m i] nums2[i];//直接将num2的数据插入到num1的尾部}sort(nums1.begin(), nums1.end());//排…...
《Python游戏编程入门》注-第4章1
《Python游戏编程入门》的第4章是“用户输入:Bomb Cathcer游戏”,通过轮询键盘和鼠标设备状态实现Bomb Cathcer游戏。 1 Bomb Cathcer游戏介绍 “4.1 认识Bomb Cathcer游戏”内容介绍了Bomb Cathcer游戏的玩法,即通过鼠标来控制红色“挡板”…...
一些硬件知识【2024/10/29】
千兆以太网有8条信号线,百兆以太网有4条线: 网络变压器构造图: 百兆以太网拓扑: BOB Smith电路: 【以太网接口电 路设计】https://www.bilibili.com/video/BV1i3411u7bv?vd_source3cc3c07b09206097d0d8b0aefdf07958&a…...
利用弱监督学习在全切片病理图像中检测和分型基底细胞癌|文献速递-基于生成模型的数据增强与疾病监测应用
Title 题目 Detection and subtyping of basal cell carcinoma in whole-slide histopathology using weakly-supervised learning 利用弱监督学习在全切片病理图像中检测和分型基底细胞癌 01 文献速递介绍 基底细胞癌 (BCC) 的发病率正在给病理诊断带来压力。BCC 的发病率…...
leetcode刷题笔记——15.三数之和
一、问题描述 给定一个整数数组 nums,判断是否存在三元组 [nums[i], nums[j], nums[k]],使得: i ! j、i ! k 且 j ! k nums[i] nums[j] nums[k] 0 需要返回所有和为 0 的三元组,且这些三元组不能重复。 输入输出 输入: 整…...
NLTK无法下载?
以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 nltk无法下载怎么办?什么是NLTK?为什么要用NLTK?如何下载? nltk无法下载怎么办? 什么是NLTK? NLTK是学习自然…...
4大核心能力赋能企业级视频资源管理:抖音批量下载工具的技术实现与商业价值
4大核心能力赋能企业级视频资源管理:抖音批量下载工具的技术实现与商业价值 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字化内容爆发的时代,企业级视频资源管理面临着效率与成…...
仅剩最后23套田间网关固件兼容包!Python农业物联网部署必备的8个设备驱动补丁(含Raspberry Pi 5专用版)
第一章:田间网关固件兼容包的农业物联网部署意义 在农业物联网(Agri-IoT)规模化落地过程中,田间网关作为边缘侧核心枢纽,承担着多源异构传感器数据汇聚、协议转换、本地决策与上云协同等关键职能。然而,我国…...
终极指南:使用OpenCore Legacy Patcher为老旧Mac安装最新macOS系统
终极指南:使用OpenCore Legacy Patcher为老旧Mac安装最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为老旧Mac无法升级最新系统而烦恼吗&am…...
SOONet与Transformer架构深度解析:提升长视频理解精度的核心技术
SOONet与Transformer架构深度解析:提升长视频理解精度的核心技术 最近在折腾长视频内容理解的项目时,遇到了一个挺头疼的问题:用户给一段长达几分钟甚至几十分钟的视频,再提一个复杂的自然语言问题,比如“请找出视频中…...
Phi-4-Reasoning-VisionGPU算力:双卡4090推理吞吐达12 token/s实测
Phi-4-Reasoning-VisionGPU算力:双卡4090推理吞吐达12 token/s实测 1. 项目概述 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具。该工具专为双卡RTX 4090环境优化,通过精心设计的架构和优化策略&a…...
静态图训练卡顿、NCCL超时、Graph Break频发?PyTorch 3.0分布式训练高频故障诊断与热修复清单,含12个可复用调试脚本
第一章:PyTorch 3.0静态图分布式训练故障全景认知PyTorch 3.0 引入的静态图编译(TorchDynamo Inductor 后端)与原生分布式训练(如 FSDP、DDP)深度耦合后,故障表现呈现多维交织特征:编译期图构建…...
Python边缘部署不是“复制粘贴”!12个生产环境真实报错日志溯源分析(附可复用诊断矩阵表)
第一章:Python边缘部署的本质认知与误区破除Python边缘部署不是将桌面或服务器环境简单“搬移”到嵌入式设备,而是面向资源受限、实时性敏感、网络不可靠、运维通道受限等物理约束下的系统性重构。其本质是**在算力、内存、存储、功耗与可靠性之间达成动…...
el-tabs报错Cannot read properties of null (reading ‘insertBefore‘)
使用elementui-plus的tabs组件在开发中遇到的一个问题,分析了代码,发现逻辑没有任何问题,但是点击tab切换就会报错:Uncaught (in promise) TypeError: Cannot read properties of null (reading insertBefore)调试发现parent参数是…...
wflow工作流设计器:5分钟快速上手的企业流程自动化完整指南
wflow工作流设计器:5分钟快速上手的企业流程自动化完整指南 【免费下载链接】wflow workflow 工作流设计器,企业OA流程设计。表单流程设计界面操作超级简单!!普通用户也能分分钟上手,不需要专业知识。本设计器支持可视…...
Python AI 工具不是越多越好!——3个被低估但日均调用量破50万的轻量级用例工具(附内部灰度测试报告)
第一章:Python AI 工具不是越多越好!——轻量级用例工具的价值重估在AI工程实践中,开发者常陷入“工具堆砌陷阱”:为一个文本清洗任务引入 Transformers,为简单分类部署完整 FastAPI ONNX Runtime Redis 缓存栈。这种…...
