劍指Offer 最小的K個數 兩種解法

2021-10-03 19:20:36 字數 1547 閱讀 3853

1. 問題描述

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

2. 解題思路

方法1:

①:使用stl 標準庫中的priority_queue 容器(以下簡稱:容器)。

priority_queue介紹

②:按順序遍歷整個陣列

③:容器中永遠儲存著遍歷過的數中當前最小的4個數

④:每遍歷乙個數,根據容器的特徵,所遍歷的那個數隻需要跟容器的 top(也稱隊尾:即將出隊的數) 比較,

如果遍歷的數 < top:把top彈出,把當前遍歷的這個數push到容器中。容器會根據我們預先設定的規則重排

方法2

①:使用乙個棧來模擬priotity_queue的工作原理,有點麻煩,不做解釋只附**

3. c/c++源**

方法1:

/*

templateclass myless

};*/

class

solution

priority_queue<

int,vector<

int>

,less<

int>

> m_minqueue;

for(

int i =

0;i != input.

size()

;i++

)else}}

while

(!m_minqueue.

empty()

)return m_topvector;}}

;

方法2:

class

solution

else

break;}

m_minstack.

push

(input[i]);

while

(!tempstack.

empty()

)}continue;}

if(!m_minstack.

empty()

&&m_minstack.

top(

)> input[i]

)else

break;}

m_minstack.

push

(input[i]);

while

(!tempstack.

empty()

)}} stack<

int> tempstack;

while

(!m_minstack.

empty()

)while

(!tempstack.

empty()

)return m_vec;}}

;

劍指offer 最小的k個數 兩種解法

題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,使用partition函式可以知道,使用o n 的時間複雜度就可以找出第k大的數字,並且左邊的數字比這個數小,右邊的數字比這個數字大。因此可以取k為4,然後輸出前k個數字...

劍指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 基於...