class Solution {
public int findDuplicate(int[] nums) {
int length = nums.length;
for (int i = 0; i < length; i++) {
// 满足题意的条件,位置 i + 1 = nums[i],当不满足时,说明需要交换,进入循环
while (i + 1 != nums[i]) {
if (nums[i] == nums[nums[i] - 1]) return nums[i];
// after,表示该数在数组中实际位置的下标
int before = nums[i], after = nums[i] - 1;
nums[i] = nums[after];
nums[after] = before;
}
}
return 0;
}
}