Java学算法之数组中的重复数字

剑指offer003—数组中的重复数字

题目描述:

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

解法:

一、Map

把数组遍历到map当发现已经包含数值时退出。

public int findRepeatNumber(int[] nums) {
    
    
        /**
         将数组遍历到map,key为数值,v为次数。
        当包含重复key时候,结束
         **/
        HashMap<Integer, Integer> map = new HashMap<>();
        int res = 0 ;
        for (int num : nums) {
    
    
            if (map.containsKey(num)){
    
    
                res = num;
                break;
            }
            map.put(num,1);
        }
        return res;
    }

二、Set

遍历添加如果添加失败就是重复元素

 public int findRepeatNumber(int[] nums) {
    
    
        Set<Integer> set = new HashSet<Integer>();
        int repeat = -1;
        for (int num : nums) {
    
    
            if (!set.add(num)) {
    
    
                repeat = num;
                break;
            }
        }
        return repeat;
    }

猜你喜欢

转载自blog.csdn.net/qq_31702655/article/details/107576777