【LeetCode-287】寻找重复数

问题

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。

假设 nums 只有一个重复的整数 ,找出这个重复的数 。

你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。

示例

输入: nums = [1,3,4,2,2]
输出: 2

解答

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int slow = 0, fast = 0;
        while (true) {
            slow = nums[slow];
            fast = nums[nums[fast]];
            if (slow == fast) break;
        }
        fast = 0;
        while (slow != fast) {
            slow = nums[slow];
            fast = nums[fast];
        }
        return slow;
    }
};

重点思路

可以把数组的值看作链表next的位置,那这道题就可以看作链表找环的入口。具体分析参考【LeetCode-142】环形链表 II

posted @ 2021-08-07 12:26  tmpUser  阅读(23)  评论(0编辑  收藏  举报