class Solution:
def findDuplicate(self, nums: List[int]) -> int:
# while nums[nums[0]] != nums[0]:
# nums[nums[0]], nums[0] = nums[0], nums[nums[0]]
# return nums[0]
# phase 1
slow = nums[0]
fast = nums[0]
while True:
slow = nums[slow]
fast = nums[nums[fast]]
if slow == fast:
break
slow = nums[0]
while slow != fast:
slow = nums[slow]
fast = nums[fast]
return fastp