剑指offer——最小的k个数

方法一:用partition来做,把之前求中位数的方法,类似用到这个题上,只是求的不是中位数,而是排序后的第k-1的位置,注意边界

import java.util.ArrayList;
public class Solution {
    public ArrayList GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList al=new ArrayList();
        if(input.length0&&arr[--j]>arr[p]);
            if(i

方法二:利用TreeSet,它实现了红黑树的查找,它的查找、删除和插入操作时间复杂度都是O(logk),这个方法不用改变输入数组,适用于海量数据(内存有限时,可以分批次读入),但是时间会稍微长一点,上面那个方法大概17ms,这个方法大概26ms,代码如下

import java.util.ArrayList;
import java.util.TreeSet;
public class Solution {
    public ArrayList GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList a=new ArrayList();
        if(k>input.length||k==0)
            return a;
        TreeSet ti=new TreeSet();
        for(int i=0;i

 

你可能感兴趣的:(剑指offer——最小的k个数)