- 使用JavaScript的数组方法
Array.prototype.indexOf(el, [,fromIndex])
el: 代表需要寻找的元素
formIndex可选,表示开始寻找的下标
返回值:找到返回下标index,没有返回-1function duplicate( numbers ) { // 测试非法输入 if (numbers === []) return -1; for (let i = 0; i < numbers.length; i++) { if (numbers[i] < 0 || numbers[i] > numbers.length-1) { return -1; } } for (let i = 0; i < numbers.length; i++) { // 使用indexOf(el,[,fromIndex]),假设没有会返回-1 if ( numbers.indexOf(numbers[i],i+1) != -1) { return numbers[i]; } } // 不合法输入-1(没有重复项目) return -1; }
- 不使用数组方法
- 数组中元素0~n-1就代表,如果没有重复元素,那么每个下标就对应一个值
function duplicate( numbers ) { // 测试非法输入 if (numbers === []) return -1; for (let i = 0; i < numbers.length; i++) { if (numbers[i] < 0 || numbers[i] > numbers.length-1) { return -1; } } for (let i = 0; i < numbers.length; i++) { while (numbers[i] !== i) { if (numbers[i] === numbers[numbers[i]]) { return numbers[i]; } let temp = numbers[i]; numbers[i] = numbers[temp]; numbers[temp] = temp; } } return -1; }