题目描述:在一个长度为n的数组中,值为0到n-1范围内的数字。数组中某些值是重复的,但不知道有几个数字是重复的,也不知道重复多少次。请找出数组中第一个重复的数字。例如,如果长度为7的数组[2,3,1,0,2,5,3],那么对应的输出应为2.
返回值描述:

  • 如果数组中有重复的数字,函数返回true,否则返回false;
  • 如果数组中有重复的数字,把第一个重复的值放在参数duplication[0]中(duplication已初始化,作为参数传入,可直接赋值)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function duplicate(nums, duplication) {
if (nums === null || nums.length <= 0) {
return false
}

for (let i = 0; i < nums.length; i++) {
while (nums[i] !== i) {
if (nums[i] === nums[nums[i]]) {
duplication[0] = nums[i]
return true
}
swap(nums, i, nums[i])
}
}
return false
}

function swap(arr, i, j) {
[arr[i], arr[j]] = [arr[j], arr[i]]
}