1. 程式人生 > >劍指offer -- 最小的k個數

劍指offer -- 最小的k個數

題目描述

輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

AC程式碼1

利用快速排序的思想找到第k - 1位置的數字。
缺點:改動了原陣列。

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> resList =
new ArrayList<>(); //必須保證k <= input.length if(input == null || input.length == 0 || k <= 0 || k > input.length) return resList; int start = 0; int end = input.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 < k;i++) resList.add(
input[i]); return resList; } private int partition(int[] array, int start, int end){ int temp = array[start]; int low = start; int high = end; while(low < high){ while(high > low && array[high] >= temp) high--; if(low < high) array[low] = array[high]; while(high > low && array[low] <= temp) low++; if(low < high) array[high] = array[low]; } array[low]= temp; return low; } }

方法2

利用最大堆。