维护数组下标与值一一对应:
遍历数组,当值与下标不等时,当前位置与值对应下标处的值重复交换,直到当前位置的值等于下标。
如果在交换过程中遇到位置上的值已经满足条件,表明该值重复
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