Day12-寻找重复数

Day12

算法每日一题

原题链接:https://leetcode.cn/problems/find-the-duplicate-number/description
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。
你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

/**
 * 在一个包含 n + 1 个整数的数组中,每个整数都在 1 到 n 之间(包括 1 和 n),
 * 其中只有一个整数出现了多次。找出这个重复的整数。
 * 
 * @param {number[]} nums - 一个包含 n + 1 个整数的数组
 * @return {number} - 重复的那个整数
 */
var findDuplicate = function(nums) {
    // 初始化慢指针 slow 和快指针 fast 都指向数组的起始位置
    let slow = 0, fast = 0;

    // 使用快慢指针寻找环的相遇点
    do {
        slow = nums[slow];         // 慢指针每次走一步
        fast = nums[nums[fast]];   // 快指针每次走两步
    } while (slow !== fast);

    // 将慢指针重新指向起始位置
    slow = 0;

    // 寻找环的入口点,即重复的数字
    while (slow !== fast) {
        slow = nums[slow];   // 慢指针每次走一步
        fast = nums[fast];   // 快指针每次走一步
    }

    // 返回环的入口点,也就是重复的数字
    return slow;
};
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注