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

题目:


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


思路一:排序输出

package Chap2;

import java.util.ArrayList;
import java.util.Arrays;

public class GetLeastNumbers_Solution {
	public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
		ArrayList<Integer> min_k=new ArrayList<Integer>();
		if (input.length==0) {
			return min_k;
		}
		if (k>input.length) {
			return min_k;
		}
		
		Arrays.sort(input);
		for (int i = 0; i < k; i++) {
			min_k.add(input[i]);
		}
		
		return min_k;
        
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]={0,1,5,1,6,2,7,3,8};
		ArrayList<Integer> min_k=new ArrayList<Integer>();
		min_k=GetLeastNumbers_Solution(a, 4);
		for (int i = 0; i < min_k.size(); i++) {
			System.out.println(min_k.get(i));
		}
	}

}

思路二:大小根堆

package 数组类型;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;

/*
想求最小的k个数,可以用一个大根堆过滤大的数;
如果想求k个最大的数,可以用小根堆过滤小的数;
*/
public class 找出最小K个数 {
    public static ArrayList<Integer> GetLeastNumver(int[] input, int k){
           ArrayList<Integer> integers = new ArrayList<>();
           if (input.length==0||input==null||k==0){
               return integers;
           }
           //默认小根堆
        //java 实现大小根堆用PriorityQueue(优先队列)
        PriorityQueue<Integer> maxHeap=new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;//大根堆o2-o1,小根堆o1-o2
            }
        });

        for (int i = 0; i <input.length ; i++) {
            maxHeap.offer(input[i]);
            if (i>=k){
                maxHeap.poll();
            }
        }
        for (int i = 0; i < k; i++) {
            integers.add(maxHeap.poll());

        }
        return integers;
    }

    public static void main(String[] args) {
        int[] array={4,5,1,6,2,7,3,8};
        int k=4;
        System.out.println(GetLeastNumver(array,k).toString());

    }
}

参考链接:https://blog.csdn.net/tonghuawanli/article/details/70037754

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页