问题

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

示例 1:

  1. 输入:
  2. [2, 3, 1, 0, 2, 5, 3]
  3. 输出:2 3

限制:
2 <= n <= 100000

解答

利用哈希表

class Solution {
    public int findRepeatNumber(int[] nums) {
        HashMap<Integer, Integer> counts = new HashMap<>();
        for(int i = 0; i < nums.length; i ++){
            counts.put(nums[i], counts.getOrDefault(nums[i], 0)+1);
        }

        for(int i = 0; i < nums.length; i++)
            if(counts.get(nums[i]) >= 2)
                return nums[i];

        return -1;
    }
}

排序,再查找

class solution{
    public int findRepeatNumber(int[] nums){
        Arrays.sort(nums);
        int repeat = -1;
        for(int i = 0; i < nums.length - 1 ; i ++)
            if(nums[i] == nums[i+1]){
                repeat = nums[i];
                break;
            }
        return repeat;
    }
}