劍指Offer 時間效率 最小的k個數

2021-08-15 02:03:01 字數 897 閱讀 1897

題目描述

輸入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 基於...