【力扣每日一题】961. 在长度 2N 的数组中找出重复 N 次的元素

题目描述

给你一个整数数组 nums ,该数组具有以下属性:

  • nums.length == 2 * n.
  • nums 包含 n + 1不同的 元素
  • nums 中恰有一个元素重复 n

找出并返回重复了 n 次的那个元素。

示例 1:

输入:nums = [1,2,3,3]
输出:3

示例 2:

输入:nums = [2,1,2,5,3,2]
输出:2

示例 3:

输入:nums = [5,1,5,2,5,3,5,4]
输出:5

提示:

  • 2 <= n <= 5000
  • nums.length == 2 * n
  • 0 <= nums[i] <= 10^4
  • numsn + 1不同的 元素组成,且其中一个元素恰好重复 n

简单说,就是寻找重复出现的数字。我们需要对每一个遇到的数进行存储,如果遇到的数在之前已经存储过,则返回该数字。

class Solution {
    public int repeatedNTimes(int[] nums) {
        Map<Integer,Integer> map = new HashMap();
        for(int i=0;i<nums.length;i++){
            if(!map.containsKey(nums[i]))map.put(nums[i],1);
            else return nums[i];
        }
        return -1;
    }
}

也可以用集合的方式:

class Solution {
    public int repeatedNTimes(int[] nums) {
        Set<Integer> set = new HashSet();
        for(int num:nums){
        	//如果向set中添加num时返回false,即set中已经有num了,说明重复
            if(!set.add(num)) return num;            
        }
        //不可能的情况
        return -1;
    }
}

你可能感兴趣的:(力扣每日一题,leetcode,算法,数据结构)