【LeetCode热题100(95/100)】寻找重复数

题目地址: 链接

环的入口: a

入口到相遇的点: b

环的步长: c

两个快慢指针公式:(a + b) * 2 = b + nc + a

变形可得,第一次相遇后,从起点走a步后可与慢指针相遇:nc - b = a

JS 复制代码
/*
 * @lc app=leetcode.cn id=287 lang=typescript
 *
 * [287] 寻找重复数
 */

// @lc code=start
function findDuplicate(nums: number[]): number {
    const n = nums.length;
    let [p, q] = [nums[0], nums[nums[0]]];
    while(p !== q) {
        p = nums[p];
        q = nums[nums[q]];
    }
    q = nums[0];
    p = nums[p];
    while(p !== q) {
        p = nums[p];
        q = nums[q];
    }
    return p;
};
// @lc code=end

// 1 - 2 - 3(a) - 4
//     └─------
// 到入口 a
// 入口到相遇的点 b
// 慢指针相遇的点 a + b = d
// 快指针相遇的点 a + b + nc = 2d
// nc = a + b
// nc - b(入口到b的距离) = a ==> 下一次相遇即为入口点,
相关推荐
leobertlan4 小时前
痛苦系列 | DSP-03 跨越单位圆:Z变换与零极点分析
算法·程序员
蛋蛋的就会顺顺的4 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
开发小能手1235 小时前
答案daanC语言
数据结构·算法
小 黄 鸡5 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
Navigator_Z6 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
pride.li7 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
旺仔仔仔8 小时前
机器人项目实战(5):从单次抓取,到接收指令连续做事
算法
旺仔仔仔8 小时前
机器人项目实战(2):识别物体、提取点云,再到抓取姿态
算法
姜鱼问生8 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
启观川8 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法