遍历数组 (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;
}
};