面試題40. 最小的k個數top(k) 問題的解法 一般可以用堆 或者 類似快排的思想。難度簡單76
輸入整數陣列 arr ,找出其中最小的 k 個數。例如,輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、2、3、4。
示例 1:
示例 2:輸入:arr = [3,2,1], k = 2
輸出:[1,2] 或者 [2,1]
輸入:arr = [0,1,2,1], k = 1
輸出:[0]
// time : o(k)
// space : o(nlogk)
//使用乙個堆 固定大小 將陣列中所有的元素 全部新增到堆中 根據一定的條件 才可以新增 刪除
// 最後剩餘的就是要的資料
public
int[
]getleastnumbers
(int
arr,
int k)
// 使用乙個最大堆(大頂堆)
// j**a 的 priorityqueue 預設是小頂堆,新增 comparator 引數使其變成最大堆
queue
heap =
newpriorityqueue
<
>
(k,(i1, i2)
-> integer.
compare
(i2, i1));
for(
int e : arr)
if(heap.
size()
> k)
}// 將堆中的元素存入陣列
int[
] res =
newint
[heap.
size()
];int j =0;
for(
int e : heap)
return res;
}
劍指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,思路 方法一 維護乙個大小為k的大頂堆,複雜度 o nlogk o k 特別適合處理海量資料 public class solution priorityqueuemax...
劍指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...