面试题 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个数相关推荐

  1. 【每日一题】 面试题 17.14. 最小K个数

    面试题 17.14. 最小K个数

  2. leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排

    leetcode 面试题 17.14. 最小K个数 [难度:中等] 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], ...

  3. 程序员面试金典 - 面试题 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 ...

  4. 小k java_leetcode——面试题 17.14. 最小K个数 (java快速排序)

    描述:设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4] 解题思路: 这题因为不要求排 ...

  5. 力扣 面试题 17.14. 最小K个数

    题目 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4] 来源:力扣(LeetC ...

  6. ⭐算法入门⭐《堆》中等01 —— LeetCode 面试题 17.09. 第 k 个数

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   有些数的素因子只有 3 ...

  7. 算法试题 - 找出最小 k 个数

    题目 题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解析 思路1 这一题应用堆排序算法复杂度只有O(nlog k), ...

  8. 面试题 17.09. 第 k 个数[小顶堆][动态规划]

    思路 暴力搜索 因为要求的数只含3\5\7这三个素因子,因此只需判断将每个数除3/5/7除尽后是否为1,从而判断是不是所要求序列中的一个数. 超时 代码如下: class Solution {publ ...

  9. 程序员面试金典 - 面试题 17.09. 第 k 个数(set优先队列/DP)

    1. 题目 有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数. 注意,不是必须有这些素因子,而是必须不包含其他的素因子. 例如,前几个数按顺序应该是 1,3,5,7,9,15,21. 示 ...

最新文章

  1. Kafka Sender线程如何发送数据
  2. Rational工具介绍『转』
  3. android 直播 app下载地址,蓝泡泡直播
  4. Nacos OPEN API配置管理测试
  5. _效率高的Linux管理员都会的10个关键技巧
  6. matlab肌电信号平滑滤波_MATLAB图像处理:43:用高斯平滑滤波器处理图像
  7. C++头文件保护符和变量的声明定义
  8. Python数据可视化实战——iris数据集可视化
  9. Linux Shell文本处理工具集锦
  10. Could not load driverClass ${jdbc.driver}
  11. python之提升程序性能的解决方案
  12. Python logging模块实现同时向控制台和文件打印日志
  13. flutter 返回指定界面_Flutter 即学即用系列博客——04 Flutter UI 初窥
  14. systemctl命令_开发者必备Linux命令
  15. 【洛谷 P2764】 最小路径覆盖问题(最大流)
  16. 机器学习全系列经典书籍推荐
  17. 解除操作系统宽带限制
  18. AES加密解密(C语言实现)
  19. 公众号运营-Datawhale-1
  20. 【电气专业知识问答】问:电动机的电气性能有什么要求?

热门文章

  1. 日期与时间(C/C++)
  2. UNIX网络编程笔记(4):简单的回射程序
  3. 组件化与插件化的差别在哪里?内含福利
  4. python烟花表白_python炫酷烟花表白源代码
  5. Eclipse里的快捷键
  6. 线段树(区间更改,区间查最值)模板
  7. 【2013.4.6】微软暑期实习生答案(zz)
  8. 转:OAUTH协议简介
  9. Spring AOP两种实现机制是什么?
  10. RUNOOB python练习题 39 数组排序