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

html5 wap网站毕业设计做网站有什么好处

html5 wap网站,毕业设计做网站有什么好处,网站制作软件安卓版,一个空间只能放一个网站吗Problem: 287. 寻找重复数 文章目录整体思路完整代码时空复杂度时间复杂度:O(N)空间复杂度:O(1)整体思路 这段代码旨在解决一个经典的数组问题:寻找重复数 (Find the Duplicate Number)。问题描述通常是:给定一个包含 n 1 个整数…

Problem: 287. 寻找重复数

文章目录

  • 整体思路
  • 完整代码
  • 时空复杂度
    • 时间复杂度:O(N)
    • 空间复杂度:O(1)

整体思路

这段代码旨在解决一个经典的数组问题:寻找重复数 (Find the Duplicate Number)。问题描述通常是:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1n 的范围内(包含 1n),可知至少存在一个重复的整数。要求找出这个重复的数,并且通常有附加条件:不能修改原数组,且只能使用 O(1) 的额外空间。

该算法将这个数组问题抽象成了一个链表环检测问题

  1. 构建隐式链表

    • 算法将数组的索引视为链表的节点
    • 数组中在某个索引 i 处的值 nums[i] 被视为从节点 i 指向下一个节点 nums[i]指针
    • 因此,我们可以从索引 0 开始,形成一个访问序列:0 -> nums[0] -> nums[nums[0]] -> ...
    • 为什么一定有环? 因为数组中有 n+1 个数字(来自 nums[0]nums[n]),但它们的值都在 1n 的范围内。根据鸽巢原理,至少有两个不同的索引 ij,它们的值相同,即 nums[i] = nums[j]。这意味着在我们的隐式链表中,有两个不同的节点(ij)都指向了同一个下一个节点,这必然会形成一个环。
    • 环的入口是什么? 这个环的入口节点(索引)正是那个重复的数字。因为当序列第一次访问到一个已经被访问过的索引时,这个索引就是重复值,环也就从此开始。
  2. Floyd 环检测算法

    • 该算法分两个阶段来找到环的入口。
    • 阶段一:找到环内的相遇点
      • 设置两个指针,slowfastslow 每次移动一步 (slow = nums[slow]),fast 每次移动两步 (fast = nums[nums[fast]])。
      • 它们从起点开始赛跑。由于 fastslow 快,如果链表中存在环,fast 最终会从后面追上 slow,两者在环内的某个点相遇。第一个 while 循环就是为了找到这个相遇点。
    • 阶段二:找到环的入口点
      • 这是算法最巧妙的部分。当 slowfast 相遇后,我们将其中一个指针(代码中是circle = slow)留在相遇点,同时派出另一个新指针 line 从链表的起点(索引 0)出发。
      • 现在,让 linecircle 两个指针都以相同的速度(每次一步)前进。
      • 一个数学上的结论是:这两个指针必定会在环的入口点相遇
      • 第二个 while 循环就是为了找到这个新的相遇点。
  3. 返回结果

    • linecircle 相遇时,它们所在的索引就是环的入口,也就是那个重复的数字。算法返回这个值。

完整代码

class Solution {/*** 在一个包含 n+1 个整数(范围1到n)的数组中找到重复的数字。* @param nums 整数数组* @return 重复的数字*/public int findDuplicate(int[] nums) {// --- 阶段一:找到环中的相遇点 ---// 将数组看作一个隐式链表,nums[i] 是从索引 i 指向下一个索引的指针。// slow 指针,每次移动一步。int slow = nums[0];// fast 指针,每次移动两步。int fast = nums[nums[0]];// 循环直到 slow 和 fast 相遇。// 因为题目保证有重复数,所以一定存在环,这个循环一定会终止。while (slow != fast) {slow = nums[slow];           // slow 走一步fast = nums[nums[fast]];     // fast 走两步}// --- 阶段二:找到环的入口点 ---// 此时,slow 和 fast 在环内的某一点相遇。// line 指针,从链表起点(索引0)开始。int line = 0;// circle 指针,从刚才的相遇点开始。int circle = slow;// 两个指针都以相同的速度(每次一步)前进,直到它们相遇。while (line != circle) {circle = nums[circle];line = nums[line];}// 它们相遇的节点就是环的入口,即重复的数字。return line;}
}

时空复杂度

时间复杂度:O(N)

  1. 阶段一(找到相遇点)
    • slow 指针和 fast 指针在数组中移动。slow 指针进入环之前最多走 N 步,进入环之后,fast 指针最多比 slow 指针多走一圈(长度小于 N)就能追上它。因此,slow 指针走过的总步数是 O(N) 级别的。
  2. 阶段二(找到环入口)
    • line 指针从索引 0 开始走到环入口,走的步数是环前面“直路”的长度。
    • circle 指针从相遇点开始走到环入口。
    • 这两个指针走的总步数也是 O(N) 级别的。

综合分析
整个算法由两个独立的、不嵌套的线性扫描组成。总的时间复杂度是 O(N) + O(N) = O(N)

空间复杂度:O(1)

  1. 主要存储开销:该算法没有创建任何与输入规模 N 成比例的新的数据结构(如辅助数组、哈希表等)。
  2. 辅助变量:只使用了 slow, fast, line, circle 等几个固定数量的整型变量。

综合分析
算法的所有操作都是在原数组上进行读取(没有修改),所需的额外辅助空间是常数级别的。因此,其空间复杂度为 O(1)

http://www.dtcms.com/a/534497.html

相关文章:

  • 2023年没有封闭的网站有哪些seo怎么收费的
  • 网站开发毕设任务书建设厅查询网站
  • 阜宁做网站网站建设培训的心得
  • 知了网站后台建设自己网站软件下载
  • 描写做网站专业的句子域名抢注哪个平台好
  • 做网站的可以信吗在线音乐网站 用什么做
  • 网站添加备案wordpress 手机网站支付宝
  • 广东建设教育协会网站首页视频网站直播如何做
  • 邢台做网站推广费用北京珠宝网站建设
  • 上海手机网站案例什么是网络营销理论
  • 温州市建设质量监督站网站做外贸如何访问国外网站
  • 响应式网站源码上海造价信息网官网
  • 中企做的网站太原好网站开发策划要求
  • 网站建设项目的流程图app引流推广怎么做
  • 专业网站设计流程图公司网页网站建设ppt模板下载
  • 网站建设公司大全百姓网推广一年多少钱
  • 免费个人网站空间余姚建设公司网站
  • 广州网站建设公司排行做网站具体流程步骤
  • 门户网站建设目的深圳小程序网站开发
  • wordpress如何设置网站地图业余学做衣服上哪个网站
  • 江西省建设监理网站wordpress 关闭顶部
  • 电商网站建设实训报告企业所得税只对企业征收吗
  • 网站推广实施方案高德地图看不到菲律宾
  • 一键网站建设怎么做网站备案
  • 成品网站怎样建设网站二维码链接怎么做的
  • 网站流量ip造假图片免费的分销app
  • 让网站做的有吸引力企业文化建设网站
  • 网站优化怎么做ppt毕业设计可以做网站吗
  • 亿恩 网站备案青海seo关键词排名优化工具
  • 品牌高端网站企业网站模板 讲湖南岚鸿