\quad
求乙個序列裡面第k大的數,用partition可以再o(n
)o(n)
o(n)
時間複雜度內求解
/*
對數a[left,right]進行一次partition操作後,主元pivot左側元素都小於它,右側都大於它。設
pivot索引為p,則pivot是第p-left+1大元素。求第k大時,若k==p-left+1,則說明第k大數就是pivot,
若k#include
using
namespace std;
intpartition
(int a,
int left,
int right)
a[left]
= temp;
return left;
}int
kstmax
(int a,
int left,
int right,
int k)
intmain
(int argc,
char
const
*ar**)
; cout <<
kstmax
(a,0
, n-1,
7)<< endl;
return0;
}
求第K大數
問題 a 求第k大數 時間限制 1 sec 記憶體限制 128 mb 提交 483 解決 172 提交 狀態 討論版 命題人 外部匯入 題目描述 求第k大的數 kth.pas c cpp 給定乙個長度為n 1 n 1,000,000 的無序正整數序列,以及另乙個數k 1 k 1,000,000 關於...
問題 A 求第k大數
題目鏈結 題目描述 給定乙個長度為n 1 n 1,000,000 的無序正整數序列,以及另乙個數k 1 k 1,000,000 關於第k大的數 例如序列中第3大的數是4。輸入 第一行兩個正整數m,n。第二行為n個正整數。輸出 第k大的數。樣例輸入 6 31 2 3 4 5 6 樣例輸出 4 incl...
N個數,求第K大數
有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,這個數左邊都比它大,右邊都比他小...