JZ50-数组中重复的数字
数组中重复的数字
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
//因为数组中数字范围为0 - n-1,如果完全没有重复,则下标为i的数字array[i]=i;如果不满足就说明有重复
public static int getRepeatNumber3(int[] array) {
if (array == null || array.length == 0) {
return -1;
}
int len = array.length;
for (int i = 0; i < len; i++) {
if (array[i] >= len) { //超过范围
return -1;
}
if (array[i] == i) { //每个数字与下标都在正确的位置上,继续循环。不能i++
continue;
} else { //如果不对应,就将其放在正确没有重复数字的情况下的位置。。。我们将其排在正确位置上(相当于排序)
if (array[array[i]] == array[i]) { //如果有重复,既两个数字放到同一位置
return array[i];
} else { //无重复,两个数字要换位置,否则会被覆盖
int temp = array[array[i]];
array[array[i]] = array[i];
array[i] = temp;
}
}
}
return -1;
}
//获取全部的重复数字
public static List<Integer> getRepeatNumber4(int[] array) {
List<Integer> repeat = new ArrayList<>();
if (array == null || array.length == 0) {
return null;
}
int len = array.length;
for (int i = 0; i < len; i++) {
if (array[i] >= len) { //超过范围
return null;
}
if (array[i] == i) { //每个数字与下标都在正确的位置上,继续循环。不能i++
continue;
} else { //如果不对应,就将其放在正确没有重复数字的情况下的位置。。。我们将其排在正确位置上(相当于排序)
if (array[array[i]] == array[i]) { //如果有重复,既两个数字放到同一位置
repeat.add(array[i]);
} else { //无重复,两个数字要换位置,否则会被覆盖
int temp = array[array[i]];
array[array[i]] = array[i];
array[i] = temp;
}
}
}
return repeat;
} 

美团成长空间 2667人发布