Cover image for leetcode热题100 P287 寻找重复数

leetcode热题100 P287 寻找重复数

字数 240
阅读
访客

时间轴

时间轴

2026-03-17

init

双指针,鸽巢原理,Floyd判圈( Floyd 龟兔赛跑 )

题目:

鸽巢原理(也叫抽屉原理,英文 Pigeonhole Principle)是组合数学里一个非常基础但很强大的原理。

基本思想: 如果 n + 1 只鸽子放进 n 个鸽巢, 那么至少有一个鸽巢里有 ≥2 只鸽子

这个题利用 Floyd 判圈法,转换成 P142 这种问题

12345678910111213141516171819202122232425262728
#include <vector>using std::vector;class Solution {    public:        int findDuplicate(vector<int> &nums)        {                // 1 <= n <= 105                // nums.length == n + 1                // 1 <= nums[i] <= n                // nums 中 只有一个整数 出现 两次或多次 ,其余整数均只出现 一次                int slow = 0, fast = 0;                do {                        slow = nums[slow];                        fast = nums[nums[fast]];                } while (slow != fast);                // 相遇                slow = 0;                do {                        slow = nums[slow];                        fast = nums[fast];                } while (slow != fast);                return slow;        }};
评论加载中…