维护数组下标与值一一对应:
遍历数组,当值与下标不等时,当前位置与值对应下标处的值重复交换,直到当前位置的值等于下标。
如果在交换过程中遇到位置上的值已经满足条件,表明该值重复
class Solution: def duplicate(self , numbers: List[int]) -> int: for i in range(len(numbers)): while numbers[i] != i: # 当下标与值不相等时,交换到相等为止 if numbers[numbers[i]] == numbers[i]: # numbers[i]下标处值满足条件,则重复,返回 return numbers[i] else: # 交换 numbers[numbers[i]], numbers[i] = numbers[i], numbers[numbers[i]] # 遍历完还没有退出,表示全部一一对应 return -1