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

遍历数组 (nums)

  1. (nums[i] = i) : 说明此数字已在对应索引位置,无需交换,因此跳过;
  2. (nums[nums[i]] = nums[i]) : 代表索引 (nums[i]) 处和索引 (i) 处的元素值都为 (nums[i]) ,即找到一组重复值,返回此值 (nums[i]);否则,交换索引为 (i)(nums[i]) 的元素值,将此数字交换至对应索引位置。
  3. 若遍历完毕尚未返回,则返回 -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;
    }
};
原文地址:https://www.cnblogs.com/fxh0707/p/15023503.html