public class Solution {
public boolean duplicate(int[] numbers, int length, int[] duplication) {
// 题目中提到数组中所有的元素都在0—n,说明数组的下标和数组的值存在一定的联系,利用数组的下标与元素一一对应,当不对应的时候,假设此时的下标为i,那么
// 如果numbers[numbers[i]]=numbers[i],说明numbers[i]下标已经一一对应,不相等,两个值进行对换。
// 判断数组是否合理
if (numbers == null || length == 0) {
return false;
}
// 数组下标与数值对应
for (int i = 0; i < length; i++) {
if (numbers[i] != i) {
if (numbers[numbers[i]] == numbers[i]) {
duplication[0] = numbers[i];
return true;
} else {
int t = numbers[numbers[i]];
numbers[numbers[i]] = numbers[i];
numbers[i] = t;
}
}
}
return false;
}
}
剑指offer:1
最新推荐文章于 2022-04-06 19:41:44 发布