leetcode287 尋找重複數
給定乙個包含 n + 1 個整數的陣列 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。
示例 1:
輸入: [1,3,4,2,2]
輸出: 2
示例 2:
輸入: [3,1,3,4,2]
輸出: 3
分析:因為長度為n+1的陣列的下標在0-n之間。
題目中給出的這個陣列的範圍在1-n之間,那麼可以把陣列中的每乙個位置存放的值看作鍊錶的next索引。
因為每個位置都放了乙個next索引,所以鍊錶肯定是成環的。
環的起點肯定是重複的next索引。
所以用雙指標,乙個快指標,乙個慢指標,如果兩個指標重合,兩個路程相減就是環的長度。再令頭指標和慢指標向前移動,如果重合就是環的起點。
class solution:
def findduplicate(self, nums: list[int]) -> int:
t=r=nums[0]
while(true):
t=nums[t]
r=nums[nums[r]]
if t==r:
break
h=nums[0]
while(t!=h):
t=nums[t]
h=nums[h]
return h
雙向鍊錶和環形鍊錶 約瑟夫問題
雙向鍊錶 package linkedlist public class dooublelinkedlistdemo 建立乙個雙向鍊錶的類 class doublelinkelist 遍歷雙向鍊錶的方法 public void list 定義輔助變數來遍歷 heronode2 temp head.n...
環形鍊錶的判斷
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...
鍊錶的中間節點和判斷鍊錶是否為環形鍊錶
基本思想 設定兩個指標,都指向鍊錶的頭節點。兩個指標同時從鍊錶的頭節點出發,乙個指標每次走一步,另乙個指標每次走兩步。1.走得快的指標走到鍊錶末尾時,走得慢的指標剛好指向鍊錶的中間節點。2.走得快的指標如果追的上走得慢的指標,則鍊錶為環形鍊錶,反之不是。如下 include include usin...