题解 | #数组中重复的数字#
思路
一、使用额外存储法
-
创建一个Map,用来储存键值
-
遍历numbers,判断map内有无numbers元素
-
有的话直接return 该元素
-
没有则添加该元素到map中
-
遍历结束,无返回时直接return -1
二、 先排序 后判断
-
先对numbers数组进行排序
-
遍历该数组,判断前后有无重复元素,有直接返回该元素
-
遍历结束,直接return -1
三、 使用indexOf 和 indexLast 来判断元素在数组位置是否一致
-
遍历数组
-
使用indexOf 和 lastIndexOf判断元素前后位置是否一致
-
不一致直接返回number元素
-
遍历结束,直接返回-1
//解法一 哈希表
for(let i=0;i<numbers.length;i++){
if(typeof numbers[i] !== 'number') {
return -1;
}
if(map.has(numbers[i])){
return numbers[i];
// map.set(numbers[i],map.get(numbers[i])+1);
} else {
map.set(numbers[i], 1);
}
}
return -1;
//解法二 先排序 前后判断
if(numbers.length < 2) {
return -1;
}
numbers.sort((a,b) => a-b);
for(let i=0; i < numbers.length-1; i++) {
if(numbers[i] === numbers[i+1]) {
return numbers[i];
}
}
return -1;
//解法三 JS使用indexOf 和 indexLast 来判断数组位置是否一致 时间最慢
for(let i=0;i<numbers.length;i++) {
let num = numbers[i];
if(numbers.indexOf(num) !== numbers.lastIndexOf(num)){
return numbers[i];
}
}
return -1;
//解法四 位置重排
for (let i = 0;i < numbers.length; i++) {
if(numbers[i] === i){
continue;
} else {
if(numbers[i] === numbers[numbers[i]]) {
return numbers[i];
} else {
swap(numbers, i, numbers[i]);
}
}
}
return -1;
查看6道真题和解析