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

数组中重复的数字

https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524

第一想法是两层for循环

import java.util.*;


public class Solution {
    public int duplicate (int[] numbers) {
        

        if (numbers.length == 0) {
            return -1;
        }
        
        for (int i = 0; i < numbers.length; i++) {
            for(int j=i+1;j<numbers.length;j++){
                if (numbers[i] == numbers[j]) {
                    return numbers[j];
                }
            }
        }
        return -1;
    }
}

时间复杂度O(n^2)

排名第一的写法

新建一个boolean数组,长度和numbers一样。默认值都为false。

看else后的语句,b[numbers[i]] = true; 把numbers数组中的值作为b数组的下标,赋为true。

    public int duplicate (int[] numbers) {
      boolean[] b =  new boolean[numbers.length];
      for(int i=0;i<numbers.length;i++){
          if(b[numbers[i]]){
              return numbers[i];
          }else{
              b[numbers[i]] = true;
          }
      }
      return -1;
    }

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 14:00
不想多说了,什么逆天HR,还要教我礼貌😂
机械打工仔:这不纯傻卵吗,他还操心上别人老板了
投递BOSS直聘等公司7个岗位
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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