查詢前三個最大或者前三個最小的數,相當於查詢冠亞季前三名的演算法了,應該如何做呢?
當然可以用堆做,時間效率很高,下面是個簡易的方法。
查詢前三個最大數演算法:
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 上述第四種是歸併排序,所有排序演算法,最...