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