当前位置: 首页 > news >正文

分治-快排-面试题 17.14.最小k个数-力扣(LeetCode)

一、题目解析

1、返回k个最小数

2、可以任意顺序

二、算法原理

解法1:排序 O(N*logN)

直接排序数组,然后用迭代器初始化构造一个匿名对象

解法2:大根堆 O(N*logk)

构造一个大根堆,依次插入元素,控制容器大小为k,超过k的部分pop掉,最后大根堆中存储的就是k个最小的元素,插入到vector中

解法3:快排

随机基准元素+数组分三块

详细见该篇文章分治-快排-215.数组中的第k个最大元素-力扣(LeetCode)-CSDN博客

根据三块区域元素个数分情况讨论

三、代码示例

解法1:

 //解法1:排序vector<int> smallestK(vector<int>& arr, int k){sort(arr.begin(),arr.end());return {arr.begin(),arr.begin()+k};}

解法2:

//解法2:大根堆vector<int> smallestK(vector<int>& arr, int k){if(k == 0 || arr.empty()) return {};priority_queue<int> pq;for(auto e : arr){pq.push(e);if(pq.size()>k) pq.pop();}vector<int> ret;while(k--){ret.push_back(pq.top());pq.pop();}return ret;}

解法3:

//解法3:快排vector<int> smallestK(vector<int>& arr, int k){srand(time(NULL));if(k==0 || arr.empty()) return {};qsort(arr,k,0,arr.size()-1);return {arr.begin(),arr.begin()+k};}void qsort(vector<int>& arr,int k,int l,int r){if(l>=r) return;int key = getRandom(arr,l,r);//随机选择基准元素int left = l-1,right = r+1,i = l;//数组分三块while(i<right){if(arr[i]<key) swap(arr[++left],arr[i++]);else if(arr[i] == key) i++;else swap(arr[i],arr[--right]);}int a = left - l +1,b = right - left - 1;//分情况讨论if(a>k) qsort(arr,k,l,left);else if(a+b>=k) return;else qsort(arr,k-a-b,right,r);}int getRandom(vector<int>& arr,int left,int right){return arr[rand() % (right-left+1) + left];}

看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见!

http://www.lryc.cn/news/615535.html

相关文章:

  • 【Datawhale AI夏令营】让AI读懂财报PDF(多模态RAG)(Task 2)
  • 【无标题】六边形结构在二维拓扑量子色动力学模型中确实具有独特优势,并构建完整的二维拓扑量子色动力学模型。
  • QToolBar 的 addPermanentWidget() 详解与实战场景
  • Python如何将图片转换为PDF格式
  • [SC]SystemC 常见的编译/语法错误与解法(三)
  • PowerShell 入门系列(五):运行命令与命令剖析详解
  • Effective C++ 条款32:确定你的public继承塑模出 is-a 关系
  • pytorch+tensorboard+可视化CNN
  • ubuntu dpkg命令使用指南
  • 【线性代数】其他
  • 机器翻译实战:使用Gensim训练中英文词向量模型及可视化
  • leetcode-C语言-3479.水果成篮 III
  • 写 SPSS文件系统
  • Linux软件编程:shell
  • 组合期权:垂直价差
  • C++ 中的智能指针
  • 电子电气架构 --- 电气/电子架构迁移已拉开帷幕
  • Oracle数据库重启后打开异常状态的检查步骤
  • 一周学会Matplotlib3 Python 数据可视化-网格 (Grid)
  • [IOMMU]面向芯片/SoC验证工程的IOMMU全景速览
  • C# 通过第三方库INIFileParser管理INI配置文件
  • 智慧园区误报率↓76%:陌讯多模态融合算法实战解析
  • 202506 电子学会青少年等级考试机器人一级理论综合真题
  • 闲鱼智能监控机器人:基于 Playwright 与 AI 的多任务监控分析工具
  • 2025年SEVC SCI2区,基于深度强化学习与模拟退火的多无人机侦察任务规划,深度解析+性能实测
  • Dify 从入门到精通(第 24/100 篇):Dify 的实时数据处理与流式输出
  • 微积分 | 外微分
  • HUAWEI交换机命令基础
  • java基础(六)jvm
  • 微信小程序中实现表单自动填充功能的方法