剑指 Offer 03. 数组中重复的数字

思路:把每个数都放在符合规则的位置上。或者是用set,如果出现重复元素就return。
题解:
class Solution {
public int findRepeatNumber(int[] nums) {
// 应该待的地方 值为1的放在[1],值为2的放在[2]
for (int i = 0; i < nums.length; i++) {
while (nums[i] != i) {
// 把索引为i的数nums[i]放到他本来应该待的地方[nums[i]]
int idx = nums[i];//为防止nums[i]变化影响swap()所以用idx记录索引
// 发现重复数
if (nums[i] == nums[idx]) return nums[i];
// swap
int tmp = nums[i];
nums[i] = nums[idx];
nums[idx] = tmp;
}
}
return -1;
}
}

浙公网安备 33010602011771号