当前位置:首页 >> 中药大全 >> 【算法】链表解题简而言之

【算法】链表解题简而言之

发布时间:2023-03-08

数据流关键问题一般来说很简单或中的等。 而且化解思路有限。 学完这前言,你可以化解 Leetcode 中的的主要数据流关键问题。

两个磁盘

两个磁盘对于单个此表来说是短时间磁盘和更快磁盘,或者对于两个数据流 p1 和 p2 来说是两个磁盘。

短时间磁盘(单个此表)

Leetcode 876题是找数据流的正中的间。 由于我们不并不知道list的总长度,最从外部的方法是先查找list得到总长度n,得到正中的间n/2,然后再查找。 如果我们没用通过一次性访问超过目标,我们无需应用于slow-fast磁盘。 每次我们慢走一步,快走两步。 当更快到达终点空时,缓慢到达正中的间。

检查数据流中的是否有反应器是最传统习俗的关键问题之一。 化解方案是短时间磁盘。 每当慢进一步,快进两步。 如果fast来到一个空磁盘,说明数据流中的不能反应器; 如果快变慢,这这样一来此表中的有一个反应器。

有一个后续关键问题:

142.数据流反应器II

给定数据流的一头部,回到反应器开始的链表。

要认出一个反应器的起始链表,我们必需确保此表中的有一个反应器。 由于更快伸展时它们碰见时伸展东北方是短时间的两倍,因此我们可以将 k 步说明为短时间,将 2k 步说明为更快。 代为参见下图同步进行说明:

如果交汇点和交汇点之间的东北方是 m,那么交汇点东北方一头部有 k-m 步。 巧合的是,从交汇点伸展 k-m 步将准确到达交汇点。 因此,一旦我们认出了交汇点,我们可以将短时间解释器到一头部并在交汇点维持更快。 然后一步一步向右伸展两个磁盘。 最后,取而代之交汇点应该是反应器的交汇点,因为两者的东北方都是 k-m!

应用于短时间-更快磁盘的另一个关键问题是仅通过一次查找认出最后的第 k 个链表。 由于数据流是单向的,我们不并不知道从现阶段链表到结束链表有多远,所以我们无需查找数据流两次,通过一个磁盘认出最后的第 k 个链表。 但是如果我们有磁盘,slow 让 fast 先走 k 步,然后当 fast 超过 null 时,slow 将在 n-k 链表。

通过后面的参数,我们可以化解 Leetcode 关键问题 19 如下:

p1-p2 磁盘(两个此表)

当比较两个此表时,我们无需两个磁盘来迭代两个此表的每个链表。 关键是要写成伸展条件。 以 Leetcode 关键问题 21 为例。 我们被要求合并两个排序此表。 我们应用于两个磁盘 p1 和 p2 从两个一头开始并向右伸展较大的一个,直到其中的一个到达终点。

Leetcode 关键问题 160 是另一个应用于 p1-p2 磁盘的范例。 我们无需在不应用于额外紧致的情况下认出两个此表的交集。 但是交点前的链表个数显然不一样,所以我们不能一次查找没用p1和p2在交点。 这里的主要技巧是终端合并两个此表,以便如果存在一个大,p1 和 p2 将同时到达一个大。

河北男科医院哪家更好
常州治包皮过长哪家医院好
昆明治疗白癜风
宁波看白癜风哪里比较好
南京治白癜风医院哪好
标签:
友情链接: