theme: smartblue
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
在长度 2N 的数组中找出重复 N 次的元素
题目解析
题目难度:简单
题目素材解析
根据题目的描述和代码模板来看,只提供了一个参数素材:
- 含零的正整数数组nums,且最大长度在4到10000之间。
提供了一个概念:
- nums数组中的元素,只会存在一个重复元素,并且这个元素会占用数组一半的位置。
我的解读
根据题目的素材和概念来解决这个问题,其实很简单。
只需要抓住一个点,那就是只有一个元素会存在重复值,一下子就清晰多了。
通过判断一个值是否在数组中已经存在的方法就很多了。
解题思路
这里要真正解决这个问题,还需要在双重循环和单次循环中选择一下。
如果数组比较大的话,双重循环就会比较费时费力了。
所以还是选择单次循环,通过Set集合来解决是否存在的问题。
第一步,先声明一个Set集合变量set。
第二步,开始循环数组。
第三步,循环体中只做一个判断,如果set集合中存在当前元素,就直接返回该结果;如果不存在当前元素,就添加到set集合中。
如此就能得到正确的答案了。
在看大哥们的题解时,还是很多情况下都是使用set集合,但是也有大哥使用计数,显然是有的大哥不满意set占用内存比较高。
代码
```java 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集合显然内存会稍高一些。
Java代码本地执行
Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。