面试题 17.14. 最小K个数
面试题 17.14. 最小K个数
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
提示:
- 0 <= len(arr) <= 100000
- 0 <= k <= min(100000, len(arr))
解题思路
通过快速选择,我们可以将数组划分成两个区间A[l,i],B[i+1,r],A区间的所有元素均小于B区间
- 如果k刚好就是A区间的长度的话,说明我们已经找到了最小的k个数字
- 如果k大于A区间长度的话,说明我们要找的除了整个A区间以外,还有B区间的一部分元素
- 如果k小于A区间长度的话,说明我们需要找的数全部在A区间里面
代码
class Solution {public int[] smallestK(int[] arr, int k) {int[] res=new int[k];int l=0,r=arr.length-1,w=k;while(l<r){int i=partition(arr,l,r);int n=i-l+1;if(n==k){break;}else if(n<k){l=i+1;k-=n;}else {r=i;}}System.arraycopy(arr,0,res,0,w);return res;}public int partition(int[] arr, int l,int r) {int t=arr[l];while(l<r){while(l<r&&arr[r]>=t)r--;arr[l]=arr[r];while(l<r&&arr[l]<=t)l++;arr[r]=arr[l];}arr[l]=t;return l;}
}
面试题 17.14. 最小K个数相关推荐
- 【每日一题】 面试题 17.14. 最小K个数
面试题 17.14. 最小K个数
- leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排
leetcode 面试题 17.14. 最小K个数 [难度:中等] 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], ...
- 程序员面试金典 - 面试题 17.14. 最小K个数(快排划分O(n))
1. 题目 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4]提示: 0 &l ...
- 小k java_leetcode——面试题 17.14. 最小K个数 (java快速排序)
描述:设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4] 解题思路: 这题因为不要求排 ...
- 力扣 面试题 17.14. 最小K个数
题目 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4] 来源:力扣(LeetC ...
- ⭐算法入门⭐《堆》中等01 —— LeetCode 面试题 17.09. 第 k 个数
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 有些数的素因子只有 3 ...
- 算法试题 - 找出最小 k 个数
题目 题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解析 思路1 这一题应用堆排序算法复杂度只有O(nlog k), ...
- 面试题 17.09. 第 k 个数[小顶堆][动态规划]
思路 暴力搜索 因为要求的数只含3\5\7这三个素因子,因此只需判断将每个数除3/5/7除尽后是否为1,从而判断是不是所要求序列中的一个数. 超时 代码如下: class Solution {publ ...
- 程序员面试金典 - 面试题 17.09. 第 k 个数(set优先队列/DP)
1. 题目 有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数. 注意,不是必须有这些素因子,而是必须不包含其他的素因子. 例如,前几个数按顺序应该是 1,3,5,7,9,15,21. 示 ...
最新文章
- Kafka Sender线程如何发送数据
- Rational工具介绍『转』
- android 直播 app下载地址,蓝泡泡直播
- Nacos OPEN API配置管理测试
- _效率高的Linux管理员都会的10个关键技巧
- matlab肌电信号平滑滤波_MATLAB图像处理:43:用高斯平滑滤波器处理图像
- C++头文件保护符和变量的声明定义
- Python数据可视化实战——iris数据集可视化
- Linux Shell文本处理工具集锦
- Could not load driverClass ${jdbc.driver}
- python之提升程序性能的解决方案
- Python logging模块实现同时向控制台和文件打印日志
- flutter 返回指定界面_Flutter 即学即用系列博客——04 Flutter UI 初窥
- systemctl命令_开发者必备Linux命令
- 【洛谷 P2764】 最小路径覆盖问题(最大流)
- 机器学习全系列经典书籍推荐
- 解除操作系统宽带限制
- AES加密解密(C语言实现)
- 公众号运营-Datawhale-1
- 【电气专业知识问答】问:电动机的电气性能有什么要求?