29.最小的K个数
题目描述:
输入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.连续子数组的最大和
29.最小的K个数的更多相关文章
- 剑指Offer 29. 最小的K个数 (其他)
		
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题目地址 https://www.nowcoder.com/prac ...
 - 29最小的K个数
		
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 利用快速排序的partion 来解决 如果基于数字的第 ...
 - [剑指Offer] 29.最小的K个数
		
[思路1]全排序(快排)之后取出前K个数.O(K+nlogn) class Solution { public: vector<int> GetLeastNumbers_Solution( ...
 - 剑指offer——python【第29题】最小的K个数
		
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路 先排序后取数,排序可以用冒泡,插入,选择,快排,二分法等等, ...
 - 剑指offer(29)最小的K个数
		
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 题目分析 这题有两种方法来做. 第一种就是基于partition的 ...
 - 《剑指offer》— JavaScript(29)最小的K个数
		
最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 思路一 使用JavaScript的Array对象的so ...
 - 29、最小的K个数
		
一.题目 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 二.解法 import java.util.ArrayList; ...
 - 【剑指Offer】29、最小的K个数
		
题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 解题思路: 本题最直观的解法就是将输入的n个整数排 ...
 - 剑指29:最小的k个数
		
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. class Solution {public: vector& ...
 
随机推荐
- 修改eclipse默认workspace
			
三种方法 (只改其一可能无效,最好都试试) 1. 修改exlipse安装目录下\configuration\.settings\org.eclipse.ui.ide.prefs文件,修改RECENT_ ...
 - 如何搭建自己的SPRING INITIALIZR server
			
这两天在慕课学Spring boot ,用idea通过spring initializr新建项目 即使用代理连不上.无奈. 参考了 GitHub - spring-io/initializr: A w ...
 - 如何判定Unity已破解成功
			
[如何判定Unity已破解成功] 点击菜单“Unity”->"About Unity...".在弹出的关于Unity的信息的对话框中,如果是已破解版本,在右下角会显示序列号.
 - Functions & Closures
			
[Functions] 1.不带返回值的函数: 2.通过tuple返回元素 返回的tuple可按如下方式使用: 3.External Parameter: External parameter的使用: ...
 - Gym101350 J Lazy Physics Cat
			
参考博客:https://blog.csdn.net/lengqiu2015/article/details/76855681#reply 题意 给出一个长度为n的01串 我们定义F(x,y)是区间[ ...
 - 【bzoj1016】[JSOI2008]最小生成树计数
			
1016: [JSOI2008]最小生成树计数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4863 Solved: 1973[Submit][St ...
 - Java AOP 注解配置与xml配置
			
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
 - Topic modeling【经典模型】
			
http://www.cs.princeton.edu/~blei/topicmodeling.html Topic models are a suite of algorithms that unc ...
 - Android 单例模式探讨
			
Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五 ...
 - osm2pgsql导入少字段
			
Explanation: osm2pgsql imports normally the data in a static database schema. The tags without a cor ...