当前位置 博文首页 > 是琳琳呀!的博客:剑指offer--数组中重复数字

    是琳琳呀!的博客:剑指offer--数组中重复数字

    作者:[db:作者] 时间:2021-08-16 10:03

    数组中重复的数字

    题目

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。没有重复的数字返回-1。

    解析
    1:使用HashSet:

    public int duplicate (int[] numbers) {
            // write code here
            if(numbers==null||numbers.length==0){
                return -1;
            }
            HashSet<Integer> set = new HashSet<>();
            for(int i=0;i<numbers.length;i++){
                if(!set.contains(numbers[i])){
                    set.add(numbers[i]);
                }else{
                    return numbers[i];
                }
            }
            return -1;
        }
    }
    

    2:使用HashMap:

    public int duplicate (int[] numbers) {
            // write code here
            if(numbers==null||numbers.length==0){
                return -1;
            }
            HashMap<Integer,Integer> map=new HashMap<>();
            for(int i=0;i<numbers.length;i++){
                if(!map.containsKey(numbers[i])){
                    map.put(numbers[i],1);
                }else{
                    map.put(numbers[i],2);
                }
            }
            for(int i=0;i<numbers.length;i++){
                if(map.get(numbers[i])==2){
                    return numbers[i];
                }
            }
            return -1;
        }
    }
    
    cs