劍指offer40 最小的 K 個數

2021-09-26 14:02:36 字數 923 閱讀 7818

題目描述

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

思路:方法一:維護乙個大小為k的大頂堆,複雜度:o(nlogk) + o(k),特別適合處理海量資料

public class solution 

priorityqueuemaxheap = new priorityqueue(k ,(integer o1 ,integer o2) -> (o2 - o1));

for(int i : input)else}}

arraylistlist = new arraylist<>();

for(int i : maxheap)

return list;

}}

方法二:快速選擇(快排思想)

public class solution 

arraylistlist = new arraylist<>();

helper(input , 0 , input.length - 1 , k);

for(int i = 0 ; i < k ; i++)

return list;

}void helper(int nums , int left , int right , int k)else if(mid < k)else}}

int partion(int nums , int left , int right)

while(l < r && nums[l] <= pivot)

if(l < r)

}swap(nums , left , r);

return r;

}void swap(int nums , int i , int j)

}

劍指offer40 最小的k個數

輸入n個整數,找出其中最小的k個數。注意 資料保證k一定小於等於輸入陣列的長度 輸出陣列內元素請按從小到大順序排序 樣例 輸入 1,2,3,4,5,6,7,8 k 4 輸出 1,2,3,4 思路1 用大頂堆儲存k個數,然後不斷的遍歷陣列,若是陣列中的數小於堆頂元素,則替換。實踐複雜度為o nlogk...

劍指offer40 最小的k個數

問題描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,方法1 o nlogn def getleastnumbers input,k input.sort return input 4 a sorted input inpu...

劍指 Offer 40 最小的k個數

輸入整數陣列 arr 找出其中最小的 k 個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。示例 1 輸入 arr 3,2,1 k 2 輸出 1,2 或者 2,1 示例 2 輸入 arr 0,1,2,1 k 1 輸出 0 限制 0 k arr.length ...