剑指 Offer 03. 数组中重复的数字
遍历数组 \(nums\):
- 若 \(nums[i] = i\) : 说明此数字已在对应索引位置,无需交换,因此跳过;
- 若 \(nums[nums[i]] = nums[i]\) : 代表索引 \(nums[i]\) 处和索引 \(i\) 处的元素值都为 \(nums[i]\) ,即找到一组重复值,返回此值 \(nums[i]\);否则,交换索引为 \(i\) 和 \(nums[i]\) 的元素值,将此数字交换至对应索引位置。
- 若遍历完毕尚未返回,则返回 -1−1 。
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
for(int i = 0; i < nums.size(); i++)
{
while(nums[i] != i)
{
if(nums[i] == nums[nums[i]]) return nums[i];
swap(nums[i], nums[nums[i]]);
}
}
return -1;
}
};