假设我们有一个包含n + 1整数的数组nums。成员的范围是1到n。证明至少必须有一个重复的号码。假设只有一个重复的数字,我们必须找到该重复的元素。因此,如果数组类似于[1,3,4,2,2],则重复元素将为2。
为了解决这个问题,我们将遵循以下步骤-
a:= nums [0]和b:= nums [0]
而真
一个:= nums [nums [a]]
b:= nums [b]
如果a = b,则破坏
ptr:= nums [0]
而ptr不是b
ptr:= nums [ptr]
b:= nums [b]
返回ptr
让我们看下面的实现以更好地理解-
class Solution(object): def findDuplicate(self, nums): hare = nums[0] tortoise = nums[0] while True: hare = nums[nums[hare]] tortoise = nums[tortoise] if hare == tortoise: break ptr = nums[0] while ptr!=tortoise: ptr = nums[ptr] tortoise = nums[tortoise] return ptr ob1 = Solution()print(ob1.findDuplicate([3,1,3,4,2]))
[3,1,3,4,2]
输出结果
3