【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 ==> 下一次相遇即为入口点,
相关推荐
To_OC7 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎8 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC9 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn10 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹10 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术10 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
CV-Climber13 小时前
检索技术的实际应用
人工智能·算法
hhzz13 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_14 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法