力扣 尋找重複數

2021-10-06 11:53:48 字數 969 閱讀 9221

給定乙個包含 n + 1 個整數的陣列 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。

不能更改原陣列(假設陣列是唯讀的)。

只能使用額外的 o(1) 的空間。

時間複雜度小於 o(n2) 。

陣列中只有乙個重複的數字,但它可能不止重複出現一次。

i->nums[i]構成一條有向邊,可知所有點出度均為1,0點的入度為0,0所在的連通分量一定有環(出邊不能空懸,只能回指非0點)

class

solution

while

(slow!=fast)

; slow=0;

dowhile

(slow!=fast)

;return fast;}}

;

count:不大於mid的nums的個數

when mid = = [1,target-1],count<=mid

when mid = = [target,n],count>mid

class

solution}if

(count<=mid)

else

}return ans;}}

;

x:nums第i位為1的個數

y:1~n第i位為1的個數

若target的第i位(從0開始計數)= = 1,x>y

若target的第i位 = = 0,x<=y

class

solution

for(

int bit=

0;bit<=bitmax;bit++)if

(i>0&&

(i&(

1<}if

(x>y)

}return ans;}}

;

287 尋找重複數 力扣(LeetCode)

給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2示例 2 輸入 3,1,3,4,2 輸出 3說明 不能更改原陣列 假設陣列是唯讀的 只能使用...

尋找重複數(力扣第287題)

給定乙個包含n 1個整數的陣列 nums,其數字都在1到n之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2示例 2 輸入 3,1,3,4,2 輸出 3說明 不能更改原陣列 假設陣列是唯讀的 只能使用額外的 o ...

尋找重複數

出自 leetcode 287,給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2 示例 2 輸入 3,1,3,4,2 輸出 3 我想到一種和...