在O n 時間複雜度內查詢前三名演算法

2021-08-27 15:40:05 字數 1163 閱讀 5291

查詢前三個最大或者前三個最小的數,相當於查詢冠亞季前三名的演算法了,應該如何做呢?

當然可以用堆做,時間效率很高,下面是個簡易的方法。

查詢前三個最大數演算法:

1) 初始化三個數為int_min
2) 迴圈

a) 如果當前元素大於第一名,更新第一名,且第三名=第二名; 第二名=第一名;

b) 如果當前元素大於第二名,而且不等於第一名,那麼更新第二名,而第三名=第二名;
c) 如果當前元素大於第三名,而且不等於第二名,那麼更新第三名。
程式:
#include#includeusing namespace std;

struct triints

;void findfirstthreeplace(triints &thr, vector&varray)

else if (varray[i] > thr.secd && varray[i] != thr.champion)

else if (varray[i] > thr.thir && varray[i] != thr.secd)

}}int main()

; int az = sizeof(a) / sizeof(a[0]);

vectorvarr(a, a+az);

triints ti;

findfirstthreeplace(ti, varr);

if(ti.champion == int_min)

cout<<"there is not competition!\n";

else

cout<<"the champion is: "

cout<<"there not second place!\n";

else

cout<<"the second place is: "

cout<<"there not third place!\n";

else

cout<<"the third place is: "

return 0;

}

執行結果:

在O n 時間複雜度內查詢前三名演算法

查詢前三個最大或者前三個最小的數,相當於查詢冠亞季前三名的演算法了,應該如何做呢?當然可以用堆做,時間效率很高,下面是個簡易的方法。查詢前三個最大數演算法 1 初始化三個數為int min2 迴圈 a 如果當前元素大於第一名,更新第一名,且第三名 第二名 第二名 第一名 b 如果當前元素大於第二名,...

在O n 時間複雜度內查詢前三名演算法

查詢前三個最大或者前三個最小的數,相當於查詢冠亞季前三名的演算法了,應該如何做呢?當然可以用堆做,時間效率很高,下面是個簡易的方法。查詢前三個最大數演算法 1 初始化三個數為int min 2 迴圈 a 如果當前元素大於第一名,更新第一名,且第三名 第二名 第二名 第一名 b 如果當前元素大於第二名...

dfs時間複雜度 時間複雜度 空間複雜度

時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...