题解 | #数组中重复的数字#

思路

一、使用额外存储法
  • 创建一个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;
 


全部评论

相关推荐

05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
05-26 09:07
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务