zoukankan      html  css  js  c++  java
  • 剑指offer-第五章优化时间和空间效率(最小的k个数)

    题目:输入n个数,输出最小的k个数。

    时间复杂度为O(n)

    思路1:我们想的到的最直接的思路就是对这个N个数进行排序,然后就可以找到最小的k个了,同样可以用快排partition。但是只要找到前K个最小的元素,并不一定要排好序。

    Java代码:

    import java.util.Random;
    
    //时间复杂度为O(n);
    public class PreKOfArray {
    	//一趟快速排序
         public int partition(int[] a,int start,int end){
        	 if(a==null)
        		 return -1;
        	 Random rand=new Random();
             int index=start+rand.nextInt(end-start);
             swrap(a,index,end);
             int small=start-1;
             for(index=start;index<a.length;index++){
            	 if(a[index]<a[end]){
            		 small++;
            		 if(small!=index)
            			 swrap(a,index,small);
            	 }
            	 
             }
             small++;
             swrap(a,small,end);
             return small;
         }
    
    	public  void swrap(int[] a, int index, int end) {
    		int temp=a[index];
    		a[index]=a[end];
    		a[end]=temp;
    	}
    	public void printMinKOfArray(int[] input,int[] output,int k){
    		if(input==null||output==null||k>input.length||k<=0)
    			return;
    		int start=0;
    		int end=input.length-1;
    		int index=partition(input,start,end);
    		//找到前k个最小的数字
    		while(index!=k-1){
    			if(index>k-1){
    				end=index-1;
    				index=partition(input,start,end);
    			}
    			else{
    				start=index+1;
    				index=partition(input,start,end);
    			}
    		}
    		
    		for(int i=0;i<k;i++){
    			output[i]=input[i];
    		}
    		
    		for(int z:output)
    			System.out.println(z+",");
    			
    	}
    	public static void main(String[] args){
    		int[] a={2,3,1,4,9,0,5,6,7,8};
    		int k=5;
    		int[] b=new int[k];
    		PreKOfArray poa=new PreKOfArray();
    		poa.printMinKOfArray(a, b, 5);
    	}
    }
    
  • 相关阅读:
    什么是数据挖掘?
    Oracle 泵导入导出
    如何创建一个 mongo 数据库并为它添加一个认证用户?
    如何提高 windows 的使用效率?--巧用运行命令
    在 vs2017 中使用 C# 7 新特性。
    什么是按引用传递和按值传递?
    Vue、Vuex+Cookie 实现自动登陆 。
    Web.config 灵活配置
    远程终端
    js框架总结
  • 原文地址:https://www.cnblogs.com/hupp/p/4750311.html
Copyright © 2011-2022 走看看