LCR 120. 寻找文件副本
题目描述
设备中存有 n 个文件,文件 id 记于数组 documents。若文件 id 相同,则定义为该文件存在副本。请返回任一存在副本的文件 id。
示例 1:
输入:documents = [2, 5, 3, 0, 5, 0]
输出:0 或 5
提示:
- 0 ≤ documents[i] ≤ n-1
- 2 <= n <= 100000
代码展示
暴力方法
复杂度:O(n^2) 较高
class Solution {
public int findRepeatDocument(int[] documents) {
for(int i = 0;i<documents.length-1;i++){
for(int j = i+1;j<documents.length;j++){
if(documents[i]==documents[j]){
return documents[i];
}
}
}
return -1;
}
}
Map方法
class Solution {
public int findRepeatDocument(int[] documents) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i = 0;i<documents.length;i++){
if(map.containsKey(documents[i])){
return documents[i];
}else{
map.put(documents[i],i);
}
}
return -1;
}
}
Set方法
Set 类型是一种无序且不重复的数据结构。所以解决这个问题中,比Map类型更适合。
class Solution {
public int findRepeatDocument(int[] documents) {
Set<Integer> set = new HashSet<Integer>();
for(int i = 0;i<documents.length;i++){
if(!set.add(documents[i])){
return documents[i];
}
}
return -1;
}
}