剑指offer读书笔记之找出数组中重复的数字

在一个长度为n的数组里的所有数字都在n~n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class {
private static int findDuplicateNum(int[] arr) {
if (arr == null || arr.length == 0) {
return -1;
}
for (int i = 0; i < arr.length; i++) {
while (arr[i] != i) {
if (arr[i] == arr[arr[i]]) {
return arr[i];
} else {
int temp = arr[i];
arr[i] = temp;
arr[temp] = temp;
}
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {2, 3, 1, 0, 2, 5, 3};
System.out.println(findDuplicateNum(arr));
}
}