时间轴
时间轴
2026-03-17
init
双指针,鸽巢原理,Floyd判圈( Floyd 龟兔赛跑 )
题目:
鸽巢原理(也叫抽屉原理,英文 Pigeonhole Principle)是组合数学里一个非常基础但很强大的原理。
基本思想: 如果 n + 1 只鸽子放进 n 个鸽巢, 那么至少有一个鸽巢里有 ≥2 只鸽子
这个题利用 Floyd 判圈法,转换成 P142 这种问题
12345678910111213141516171819202122232425262728 | 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; }}; |

