剑指offer:(30)时间效率 :最小的K个数

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

package cn.com.jianzhioffer;


import java.util.ArrayList;

public class Solution30 {
//	public ArrayList GetLeastNumbers_Solution(int[] input,int k){
//		ArrayList list = new ArrayList();
//		if(input==null||k>input.length)  return list;
//		for(int i = 0;iinput[j]){
//					int t = input[i];
//					input[i] = input[j];
//					input[j] = t;
//				}
//			}
//			list.add(input[i]);
//		}
//		return list;
//	}
	
	/*
	 * 方法一:o(n),此时要求可以修改数组
	 * 基于Partition函数来解决
	 * 如果基于数组的第k个数字来调整,使比第k个数字小的所有数字都位于数组的左边,
	 * 比第k个数字大的所有数字都位于数组的右边
	 * 这样之后,位于数组中左边的k个数字就是最小的k个数字(这k个数字不一定有序)
	 */
	public ArrayList  GetLeastNumbers(int[] input,int k){
		ArrayList list = new ArrayList();
		int length = input.length;
		if(input==null||length<=0||k>length||k<=0) return list;
		int start = 0;
		int end = length-1;
		int index = Partition(input, start, end);
		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


你可能感兴趣的:(数据结构,剑指offer,剑指offer)