2023年的408演算法題

2021-10-12 08:29:05 字數 978 閱讀 6356

思路一:

使用hash對映打表,每出現一次次數加1,如果次數有超過n/2,則存在主元素,反之,則不存在。(缺點:需要輔助陣列)

思路二:

兩兩相互抵消。如果陣列中存在大於一般的相同元素,首先假設第乙個元素為主元素的候選元素【統計個數為1】,如果目前元素統計的個數大於0,遇到相同的數字——個數加1,不同的數字——個數減1;當元素統計的個數為0時,將遇到的數字變更為候選的主元素。迴圈結束時,遍歷整個陣列來統計候選主元素在陣列中的個數,如果大於n/2,則存在主元素,反之則不存在。

#include

#include

const

int n =8;

intfunc

(int a,

int n)

else

else}}

cnt =0;

for(

int j =

0; j < n;

++j)}if

(cnt > n/2)

else

}int

main()

;//;

printf

("a:");

for(

int i =

0; i < n;

++i)

printf

("\n%d"

,func

(a, n));

return0;

}

時間複雜度:o(n)

空間複雜度:o(1)

2023年408的演算法題

設q指向末尾第k個結點,p指向最後乙個結點 假設為n 那麼當k小於等於鍊錶長度時,n k 1 n k 1 n k 1 為p和q結點相差的距離。故有,當p移動k 1個結點後,q再開始移動,當p指向最後乙個結點時,q剛好指向倒數第k個結點 如果k大於鍊錶長度,則p指向鍊錶最後乙個結點後,q都未曾移動,即...

2023年的408演算法題

因為時間高效,則採用空間換時間的方法。方法 打表計數 陣列大小設為n,即元素的個數 遍歷陣列出現number,如果範圍在 1,n 之間,則記 number 1 次數為1,遍歷完陣列後,指標i從 0,n 開始遞增判斷錶值是否為0,是則跳出迴圈,最後輸出i 1。include include intfu...

2023年408真題 線性表

已知乙個整數序列a a0,a1,an 1 其中0 ain 2 0 pk假設a中的n個元素儲存在乙個一維陣列中,請設計乙個盡可能高效的演算法,找出a的主元素。若存在主元素,則輸出該元素 否則輸出 1 測試樣例 輸出結果 5 測試樣例 輸出結果 1 選取候選的主元素 依次掃瞄陣列中的數,將第乙個遇到的數...