題目大意: 統計出現的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...