题目要求:
在长度为 N 的数组中,存放的是0~N-1的数字,判断该数组中是否还有重复的数字。
分析: 比如数组为[1,5,7,4,3,2,5,0]。判断下标值,与该位置的值是否相等,arr[i]是否等于 i
遍历数组,第一位arr[0] = 1.则把arr[0] 的值与arr[1] 的值做调换。此时下标为1的位置对应的值是1. 继续判断arr[0]的值是否等于0,如果不等于,则继续调换,如果相等则继续遍历下一个数字。
代码如下 :
/**
*
* @param n 数组长度
* @param arr 源数组
* @return
*/
public Boolean duplicate(int n, int[] arr){
//校验数组是否满足给出的条件
for (int i = 0; i < n; i++){
if (arr[i] > n-1 || arr[i] < 0){
return false;
}
}
//遍历给出的数据,把相应的值放到等于该值的下标上,如果该下标等于值,则循环下一个
for(int j = 0;j < n; j++) {
while (arr[j] != j) {
if (arr[j] == arr[arr[j]]) {
return true;
} else {
int temp = arr[j];
arr[j] = arr[temp];
arr[temp] = temp;
}
}
}
return true;
}