題目描述
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
題目分析
這是乙個典型的topk問題,即求一組數字中最小的k個數,因而經典的解法也有很多,比如,維護乙個大小為k的最大堆,當堆滿後,再有新的數字入堆時,就與堆頂的數字進行比較,如果新的數字小於堆頂的數字,就刪除堆頂的數字,並將新的數字放入堆中,這樣,遍歷完所有的數字的時候,堆裡的元素就是最小的k個數。其時間複雜度大致為o(nlog(n))
**實現
public
class
solution
});/**
*@param input
*@param k
*@return
*/public
static arraylistgetleastnumbers_solution(int input, int k)
if (input.length <= k)
return result;
}for (int i = 0; i < input.length; i++) else }}
integer ele = new integer[k];
maxheap.toarray(ele);
for (int i = 0; i < ele.length; i++)
return result;
}public
static
void
main(string args) ;
arraylistlist = getleastnumbers_solution(arr,1);
system.out.println(list);
}}
劍指offer 之 時間效率
30.最小的k個數 31.連續子陣列的最大和 32.從1到n整數中1出現的次數 33.把陣列排成最小的數 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。維護乙個計數器...
劍指offer 最小k個數
1.題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2.方法 1 基於堆排序演算法,構建最大堆。時間複雜度為o nlogk 2 如果用快速排序,時間複雜度為o nlogn 3 如果用插入排序,時間複雜度為o n 2 3.演...
劍指offer 最小的K個數
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 4 題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,解析 基於插入排序的思想可以想到使用乙個長度為k的排序陣列儲存最小的k個元素,複雜度o nk 基於...