解法一:
import java.util.*;
public class Solution {
public int duplicate (int[] a) {
int[] b = new int[a.length]; // 辅助数组,其下标代表值,数值代表出现次数
for (int i = 0; i < a.length; i++) {
if (b[a[i]] == 0) b[a[i]]++;
else return a[i];
}
return -1;
}
}
解法二:
- 《剑指Offer》官方答案,就地交换,每一个数字交换不会超过2次
- 时间复杂度O(N),空间复杂度O(1)
import java.util.*;
public class Solution {
public int duplicate (int[] a) {
for (int i = 0; i < a.length; i++) {
while (a[i] != i) {
if (a[i] == a[a[i]]) return a[i];
else {
int tmp = a[a[i]];
a[a[i]] = a[i];
a[i] = tmp;
}
}
}
return -1;
}
}