題目:
輸入n個整數,輸出其中最小的k個。
例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。
答案: 1、
這個時間複雜度為o(n),從頭遍歷一遍,將這些數對映到相應的陣列上,比如1,就對映到result[1],5就對映到result[5],然後result陣列從後往前數k個,就是結果;
但這種方式可能特別浪費空間,在某種情況下,就比如最後乙個為10000,倒數第二個為90; 2、
還有一種方式就是k不大的時候,將當前最小k個值放入新陣列中,然後記錄k中最大的值,與之後的值比較,如果小於的話,就把最大值替換掉,然後重新計算最大值;一直遍歷結束;
微軟演算法100道題
題目 n個數字 0,1,n 1 形成乙個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字 第乙個為當前數字本身,第二個為當前數字的下乙個數字 當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m個數字。求出在這個圓圈中剩下的最後乙個數字。思路 這道題的思路。分析 既然題目有乙個數字圓圈,很自然的想法...
查詢最小的k個元素 微軟面試100題 第五題
題目要求 輸入n個整數,輸出其中最小的k個。例如 輸入1,2,3,4,5,6,7,8這8個數字,則最小的4個數字為1,2,3,4。參考資料 劍指offer第30題。題目分析 解法一 用快排的思想,但是最小的k個數不用排序,時間複雜度o n 優點 時間複雜度好,缺點 會修改原整數陣列順序。解法二 建立...
100 道演算法題
左程雲在牛客網上發帖子說過建議 80 備戰面試的時間放在資料結構和演算法上,剩下的 20 的時間再放在基礎知識上。cyc2018 在小專欄裡也說過 100 道 leetcode 會對面試幫助很大。雖然來來回回看了好些遍左程雲那個初級演算法課程,但是有的地方還是記不牢,準備面試的時間大部分還是花在了閱...