投機取巧用函式進行處理,沒有從演算法角度思考;
編譯成功60%,還得再想想哪些案例沒有實現
#include
#include
#include
using namespace std;
int main()
//輸入為首行亂序數列,第二行為k值
int num;
vectorv1;
while(cin>>num)
int k;
cin>>k;
int len=v1.size();
if(k>len)
return 0;
sort(v1.begin(),v1.end());
//inverse(v1.begin(),v1.end());
unique(v1.begin(),v1.end());
cout<<*(v1.end()-k)<}
亂序陣列中第k大的數(順序統計量)
該問題是順序統計量中十分經典的問題。使用快排中的分割槽法,將第k大的數排序。若雙向掃瞄分割槽加上三點中值法或絕對中值法,可以保證在 o n 時間裡找出第k大的數。補充 可以直接使用c stl中的nth element函式 一定注意使用形式!1 2 第k大的數 3 4int part int arr,...
3 6 最快效率求出亂序陣列中第k小的數
以盡量高的效率求乙個亂序陣列中第k小的元素 演算法1用快排先將陣列排序,然後直接找第k個元素,時間複雜度為o nlgn 演算法2思路用分割槽查詢的思想,同樣有點排序的感覺,畢竟分割槽就是將小於主元的元素放左邊,大於主元的元素放右邊。與排序完再查詢不同的是 對於一次遞迴呼叫來說 比如原來陣列10個元素...
單峰陣列求第k大演算法
單峰陣列實際上可以看成兩個有序的陣列,這個問題就轉變成了兩個有序陣列求第k大。容易想到的演算法是對這兩個陣列進行歸併,生成乙個新的有序陣列,求出第k大之後就可以立刻停止,複雜度是o k 的。但是還有更優的演算法,可以使用分治的思想 實際上也是一種二分 來計算。對於兩個有序的陣列a和b,取出他們第k ...