题目描述:

  输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

思路分析:

  利用快速排序的partition函数,partition函数会在数组中找到一个Key值,然后将小于Key的放到它前面,大于Key的放到它后面,我们只需要判断Key的下标t是否等于K,如果等于K那么返回数组的前K个数,如果小于Key那么我们缩小范围,将数组的low更新为t+1,再进行查找,如果大于K,那么将high更新为t-1。直达K等于t。时间复杂度为O(n).

代码:

import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer>res=new ArrayList<>();
if(input==null||k>input.length)
return res;
int low=0;
int high=input.length-1;
while(low<high){
int t=partition(low,high,input);
if(t>k){
high=t-1;
}else if(t<k){
low=t+1;
}else{
break;
}
}
for(int i=0;i<k;i++){
res.add(input[i]);
}
return res;
}
public int partition(int low ,int high,int []input){
int key=input[low];
while(low<high){
while(low<high&&input[high]>=key){
high--;
}
input[low]=input[high];
while(low<high&&input[low]<=key){
low++;
}
input[high]=input[low];
}
input[low]=key;
return low;
}
}

28.连续子数组的最大和

最新文章

  1. .net常见的面试题
  2. 运行WampServer时,提示Exception Exception in module wampmanager.exe at 000F15A0.解决办法
  3. Unity3d iOS基本优化和高级优化
  4. hibernate操作数据库总结(转)
  5. IP地址规划和设计方法
  6. js-异步机制与同步机制
  7. linux使用tcpdump抓包工具抓取网络数据包,多示例演示
  8. springboot多模块项目下,子模块调用报错:程序包xxxxx不存在
  9. 【一天一道LeetCode】#52. N-Queens II
  10. python之路8-内置模块介绍
  11. python--random库基本介绍
  12. python中防止字符串转义
  13. 【python小练习】简单的猜数字游戏
  14. [转帖]Linux的进程线程及调度
  15. JAVA 面向对象中的多态
  16. express 学习札记
  17. .NetCore下B/S结构 初探基于遗传学算法的中学自动排课走班(二)
  18. [zabbix] zabbix从内部检测web页面
  19. ubuntu docker方式部署docker registry v2
  20. JMeter学习笔记(四)

热门文章

  1. OK6410&amp;nbsp;tftp下载内核、文件系…
  2. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 7 Regularization 正则化
  3. [转] const T、const T*、T *const、const T&amp;、const T*&amp; 的区别
  4. SQL2005 异常处理机制(Begin try Begin Catch)
  5. IWebBrowser和IE浏览器的行为不一样
  6. jsp Ajax请求(返回xml数据类型)
  7. Docker学习之路(二)DockerFile详解
  8. c语言实践 1/1+1/2+1/3+1/4+...+1/n
  9. Reddit指南
  10. sed 之 &amp; 符号