题目描述
题目一:找出数组中重复的数字。
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
练习地址
实现
// 长度n,数字0~n-1
// {2,3,1,0,2,5,3}输出2or3
// 时间复杂度O(n) 空间复杂度O(1)
public class C03_array_RepeatNum {
static boolean duplicate(int[] arr, int len, int[] duplication) {
if (arr == null || len <= 0) {
return false;
}
// 判断数组元素的合法性
for (int i = 0; i < len; i++) {
if (arr[i] < 0 || arr[i] > len - 1) {
return false;
}
}
for (int i = 0; i < len; i++) {
while (arr[i] != i) { //元素A与下标不相等
if (arr[i] == arr[arr[i]]) {//A=顺序中A元素,重复
duplication[0] = arr[i];
return true;
}
// 对调,使元素按下标排序
int temp = arr[i];
arr[i] = arr[temp];
arr[temp] = temp;
}
}
return false;
}
}
Test
public static void main(String[] args) {
int[] arr = {2, 3, 1, 0, 2, 5, 3};
int[] duplication = {0};
if (duplicate(arr, 7, duplication)) {
System.out.println(duplication[0]);
}
}