题解 | #数组中重复的数字#
思路
一、使用额外存储法
-
创建一个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;