2023年408的演算法題

2021-10-12 07:14:46 字數 837 閱讀 7043

設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都未曾移動,即指向煉表頭節點。

例如:1,2,3,4,5,6

求倒數第二個結點,p,q起始都指向頭節點,當p移動到結點1時,下次開始p和q開始同步移動,過程如下

p 1 2 3 4 5 6

q 1 2 3 4 5

最後q指向倒數第二個結點。

#include

#include

#include

typedef

struct nodenode;

node*

func

(node* l,

int k)}if

(q != l)

else

}//使用尾插法建立結點

void

create

(node*

&l) r-

>link =

null;}

//列印鍊錶

void

print

(node* l)

}int

main()

else

return0;

}

2023年的408演算法題

思路一 使用hash對映打表,每出現一次次數加1,如果次數有超過n 2,則存在主元素,反之,則不存在。缺點 需要輔助陣列 思路二 兩兩相互抵消。如果陣列中存在大於一般的相同元素,首先假設第乙個元素為主元素的候選元素 統計個數為1 如果目前元素統計的個數大於0,遇到相同的數字 個數加1,不同的數字 個...

2023年的408演算法題

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

2023年專業408的演算法題

定義三元組 a,b,c a,b,c均為整數 的距離d a b b c c a d a b b c c a d a b b c c a 給定3個非空整數集合s1,s2和s3,按公升序分別儲存在3個陣列中。請設計一種盡可能高效的演算法,計算並輸出所有可能的三元組 a,b,c a s 1,b s2,c s...