給定乙個包含 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 我想到一種和...