LeetCode刷题记录(三十六):在长度 2N 的数组中找出重复 N 次的元素

114 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

在长度 2N 的数组中找出重复 N 次的元素

image.png

题目解析

题目难度:简单

题目素材解析

根据题目的描述和代码模板来看,只提供了一个参数素材:

  1. 含零的正整数数组nums,且最大长度在4到10000之间。

提供了一个概念:

  1. nums数组中的元素,只会存在一个重复元素,并且这个元素会占用数组一半的位置。

我的解读

根据题目的素材和概念来解决这个问题,其实很简单。

只需要抓住一个点,那就是只有一个元素会存在重复值,一下子就清晰多了。

通过判断一个值是否在数组中已经存在的方法就很多了。

解题思路

这里要真正解决这个问题,还需要在双重循环和单次循环中选择一下。

如果数组比较大的话,双重循环就会比较费时费力了。

所以还是选择单次循环,通过Set集合来解决是否存在的问题。

第一步,先声明一个Set集合变量set。

第二步,开始循环数组。

第三步,循环体中只做一个判断,如果set集合中存在当前元素,就直接返回该结果;如果不存在当前元素,就添加到set集合中。

如此就能得到正确的答案了。

在看大哥们的题解时,还是很多情况下都是使用set集合,但是也有大哥使用计数,显然是有的大哥不满意set占用内存比较高。

代码

class Solution {
    
    public int repeatedNTimes(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int a : nums){
            if(set.contains(a)){
                return a;
            }else{
                set.add(a);
            }
        }
        return 0;
    }

}

执行结果

使用Set集合显然内存会稍高一些。

image.png

Java代码本地执行

Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。