29.最小的K个数
2024-09-28 18:37:37
题目描述:
输入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.连续子数组的最大和
最新文章
- .net常见的面试题
- 运行WampServer时,提示Exception Exception in module wampmanager.exe at 000F15A0.解决办法
- Unity3d iOS基本优化和高级优化
- hibernate操作数据库总结(转)
- IP地址规划和设计方法
- js-异步机制与同步机制
- linux使用tcpdump抓包工具抓取网络数据包,多示例演示
- springboot多模块项目下,子模块调用报错:程序包xxxxx不存在
- 【一天一道LeetCode】#52. N-Queens II
- python之路8-内置模块介绍
- python--random库基本介绍
- python中防止字符串转义
- 【python小练习】简单的猜数字游戏
- [转帖]Linux的进程线程及调度
- JAVA 面向对象中的多态
- express 学习札记
- .NetCore下B/S结构 初探基于遗传学算法的中学自动排课走班(二)
- [zabbix] zabbix从内部检测web页面
- ubuntu docker方式部署docker registry v2
- JMeter学习笔记(四)
热门文章
- OK6410&;nbsp;tftp下载内核、文件系…
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 7 Regularization 正则化
- [转] const T、const T*、T *const、const T&;、const T*&; 的区别
- SQL2005 异常处理机制(Begin try Begin Catch)
- IWebBrowser和IE浏览器的行为不一样
- jsp Ajax请求(返回xml数据类型)
- Docker学习之路(二)DockerFile详解
- c语言实践 1/1+1/2+1/3+1/4+...+1/n
- Reddit指南
- sed 之 &; 符号