Poj2092 計數排序 求第K大的元素

2022-07-29 15:36:15 字數 548 閱讀 7959

題目大意:  統計出現的n個數,每個數的範圍為1-10000,輸出統計次數第二大的那個數

實現:  建立乙個players[100001]的陣列,當每個數n出現時就統計players[n]++,  然後最後找出最大的次數 max和第二大的次數secondnumber,

在players中元素值為secondnumber的元素的下標即為題目所要求的數.  

注意:在統計第二大的數時,當乙個數比max大時,該數成為新的max,原來的max值變為新的secondnumber.

程式:#include

#include

#define maxnum 10001

int main(void)

else

max=0;

secondnumber=0;

for(i=0;ifor(i=1;i<=10000;i++)   //確定出現的第一大的數和第二大的數

else if(temp>secondnumber&&tempprintf("\n"); } }

return 0;

}

poj2092 簡單排序

我的思路 先把每個數的出現的次數和下標記錄,所以用到乙個資料結構node。然後先根據points值排序,那麼node 0 points就是最大值,然後我們就可以得到第二大的值,和他的位置,然後再把第二大的值的num排序一下,就可以輸出了。因為我不想用那麼多次for迴圈,所以用了兩次排序。其實這題也可...

快速排序 快排求第K大

快速排序 快排採用分治的策略,先從數列中取出乙個元素作為作為基準元素,以基準元素為標準,將問題分解為兩個子串行,使小於基準的子串行在左側,使大於等於基準元素的子串行右側,對兩個子串行再進行快速排序,最終得到排好序的序列。時間複雜度 o nlogn 空間複雜度o logn 快速排序是不穩定的 code...

求區間第k大

int a mx void insert int a,int l,int r int divide int a,int l,int r 劃分子問題 a l x return l int select int s,int l,int r,int k,int len 返回s陣列l r的第k大數的下標 w...