当前位置: 首页 > wzjs >正文

虚拟主机网站空间网站公众号建设工具

虚拟主机网站空间,网站公众号建设工具,宁波营销网站建设,宣传片制作公司费用龟兔赛跑算法(Floyd’s Cycle-Finding Algorithm)寻找重复数 问题描述 给定一个长度为 N1 的数组 nums,其中每个元素的值都在 [1, N] 范围内。根据鸽巢原理,至少有一个数字是重复的。请找出这个重复的数字。 要求: …

龟兔赛跑算法(Floyd’s Cycle-Finding Algorithm)寻找重复数

问题描述

给定一个长度为 N+1 的数组 nums,其中每个元素的值都在 [1, N] 范围内。根据鸽巢原理,至少有一个数字是重复的。请找出这个重复的数字。

要求:

  • 时间复杂度 O(N)
  • 空间复杂度 O(1)(不能使用哈希表等额外存储)

算法思路(龟兔赛跑法)

我们可以将数组视为一个链表,其中 nums[i] 表示 i → nums[i] 的边。由于存在重复数字,这个链表必然存在一个,而环的入口就是重复的数字。

步骤:

  1. 快慢指针找相遇点(判断是否有环):

    • 慢指针 slow 每次走 1 步:slow = nums[slow]
    • 快指针 fast 每次走 2 步:fast = nums[nums[fast]]
    • 直到 slow == fast,说明两者在环内相遇。
  2. 找环的入口(即重复的数字)

    • fast 重置到起点 0
    • slowfast 都每次走 1 步,直到再次相遇,相遇点就是重复的数字。

代码实现

public int findDuplicate(int[] nums) {int slow = 0;int fast = 0;// 第一阶段:快慢指针找相遇点do {slow = nums[slow];          // 慢指针走 1 步fast = nums[nums[fast]];     // 快指针走 2 步} while (slow != fast);// 第二阶段:找环的入口(重复数字)fast = 0;while (slow != fast) {slow = nums[slow];fast = nums[fast];}return slow;  // 或 fast,此时它们相等
}

为什么这个算法有效?

  1. 第一阶段(找相遇点)

    • 假设环的长度为 L,环外长度为 F
    • slow 进入环时,fast 已经在环内,且距离 slowd0 ≤ d < L)。
    • 由于 fast 每次比 slow 多走 1 步,它们会在 L - d 步后相遇。
  2. 第二阶段(找环入口)

    • slowfast 在环内相遇时,slow 走了 F + a 步(a 是环内走的步数)。
    • fast 走了 F + a + kL 步(k 是整数,因为 fast 可能绕环多圈)。
    • 由于 fast 速度是 slow2 倍:
      [
      2(F + a) = F + a + kL \implies F + a = kL \implies F = kL - a
      ]
    • 这意味着,从起点走 F 步,刚好到达环的入口(即重复数字)。

示例

输入: nums = [1, 3, 4, 2, 2]
步骤:

  1. 第一阶段
    • slow = 0 → 1 → 3 → 2 → 4 → 2 → 4 → ...
    • fast = 0 → 1 → 3 → 2 → 4 → 2 → 4 → ...
    • 它们在 24 相遇(具体取决于实现)。
  2. 第二阶段
    • fast 重置到 0,然后 slowfast 都每次走 1 步:
      • fast = 0 → 1 → 3 → 2
      • slow = 4 → 2
    • 它们在 2 相遇,因此 2 是重复数字。

复杂度分析

  • 时间复杂度O(N)(最多遍历 2N 次)。
  • 空间复杂度O(1)(仅用两个指针)。

总结

龟兔赛跑算法是一种高效的链表环检测方法,适用于:

  • 检测链表是否有环。
  • 找出数组中的重复数字(数组值在 [1, N] 范围内)。
  • 不修改原数组,且满足 O(1) 额外空间。
http://www.dtcms.com/wzjs/555862.html

相关文章:

  • wordpress文章标题前显示置顶电商seo与sem是什么
  • 注重网站开发设计与建设旅游网站制作视频百度云
  • 濮阳开公司怎么找客户重庆百度推广关键词优化
  • asp iis设置网站路径wordpress微信机器人高级版
  • m开头的手机网站怎么做网站建设整合营销
  • 大兴专业网站建设价钱东莞市城乡和住房建设局
  • 建设银行官方网站-云服务企业信用信息公信系统官网
  • 软装潢.企业网站建设邯郸网络营销平台建设
  • 做企业网站的前景北京快速网站建设
  • 淄博手机网站网络设计报告范文
  • 如何免费做网站的教程宁波网站建设培训学校
  • 郑州制作网站费用怎么在百度上发布广告
  • 专业网站搭建定做wordpress代码按钮
  • 北京通州网站制作公司海口网约车平台
  • 阐述网站建设的步骤郑州招聘网站有哪些
  • 北京网站制作培训机构杭州seo整站优化
  • 在线销售网站设计文献社区网站开发进度表
  • 长沙本土网站建设公司找在家做的兼职上什么网站好
  • 公众号里原文单发到dede网站上wordpress添加全屏海报
  • 网站后台密码怎么改网店托管代运营费用多少钱
  • 国外免费网站贸易平台前十名qq网页版手机版
  • Mac怎么搭建网站开发环境怎么建立外贸网站
  • wordpress多站点问题哪个网站可以专门做超链接
  • 网站你懂我意思正能量晚上在线观看不用下载免费魅族免费精准客户采集软件
  • 30几岁的人想学做网站企业网站包含哪些页面
  • 购物网站建设模板下载做网站编辑有前途
  • vs做网站不用建项目多商网
  • 网站服务器怎么维护wordpress无法修改文章
  • 手机怎么做三个视频网站网站首页设计风格有哪些
  • 常州建站软件学前端要多久