国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【LeetCode 算法】Linked List Cycle II 環(huán)形鏈表 II

這篇具有很好參考價值的文章主要介紹了【LeetCode 算法】Linked List Cycle II 環(huán)形鏈表 II。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Linked List Cycle II 環(huán)形鏈表 II

問題描述:

給定一個鏈表的頭節(jié)點(diǎn) head ,返回鏈表開始入環(huán)的第一個節(jié)點(diǎn)。 如果鏈表無環(huán),則返回 null。

如果鏈表中有某個節(jié)點(diǎn),可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。如果 pos 是 -1,則在該鏈表中沒有環(huán)。注意:pos 不作為參數(shù)進(jìn)行傳遞,僅僅是為了標(biāo)識鏈表的實際情況。

不允許修改 鏈表。

鏈表中節(jié)點(diǎn)的數(shù)目范圍是 [ 0 , 1 0 4 ] ? 1 0 5 < = N o d e . v a l < = 1 0 5 p o s 為 ? 1 或者鏈表中的一個有效索引 鏈表中節(jié)點(diǎn)的數(shù)目范圍是 [0, 10^4]\\ -10^5 <= Node.val <= 10^5\\ pos 為 -1 或者鏈表中的一個 有效索引 鏈表中節(jié)點(diǎn)的數(shù)目范圍是[0,104]?105<=Node.val<=105pos?1或者鏈表中的一個有效索引

分析

和昨天的環(huán)形鏈表類似,利用哈希可以在 O ( N ) O(N) O(N)的時間下,找到第一個節(jié)點(diǎn)。

另一種就是空間為常數(shù)快慢指針,就是昨天發(fā)的那個,它還有個比較學(xué)術(shù)的名字,Floyd判圈算法(Floyd Cycle Detection Algorithm),它的應(yīng)用場景很廣泛,可以自行Bing,Google。

它的思路比較簡單,如果存在環(huán),那么先找到快慢指針在環(huán)中的相遇的點(diǎn) x,然后再讓2個指針分別從head,x出發(fā),直到2者相遇,就是環(huán)的入口點(diǎn)

思路很簡單,但是大部分人還是不一定能AC。

為什么按照這個思路,可以找到的點(diǎn)一定是入口點(diǎn)?

討論的前提是有環(huán)。

假設(shè)入口點(diǎn)是y,那么從 h e a d head head到達(dá)y需要 a步,從y到達(dá)2指針的相遇點(diǎn)x要走b步,b一定是小于n的,從x繼續(xù)走c步到達(dá)入口y,所以環(huán)的大小 b + c b+c b+c
f a s t 走的路程 = a + ( k + 1 ) ( b + c ) + b fast 走的路程 = a+ (k+1)(b+c) + b fast走的路程=a+(k+1)(b+c)+b。 a 是無環(huán)段,b是環(huán)的入口到x的路程,而 ( k + 1 ) ( b + c ) (k+1)(b+c) (k+1)(b+c) 就是跑環(huán)的圈數(shù) k > = 0 k>=0 k>=0。
s l o w 的路程 = a + b slow的路程 = a+b slow的路程=a+b ,因為fast的速度是slow的2倍,所以路程也是其2倍,即
a + b + ( k + 1 ) ( b + c ) = 2 ? ( a + b ) ( k + 1 ) ( b + c ) = a + b k ( b + c ) + c = a a+b +(k+1)(b+c) = 2*(a+b)\\ (k+1)(b+c) = a+b\\ k(b+c)+c = a a+b+(k+1)(b+c)=2?(a+b)(k+1)(b+c)=a+bk(b+c)+c=a

到這里就會可以得到一個結(jié)論,設(shè)置2個指針分別從點(diǎn)x和head出發(fā),每次一步,如果相遇就是入口點(diǎn)

如果你無法理解這個結(jié)論.

提示你可以從路程的角度來思考,即一個從x出發(fā)的指針,它可能走c,或者是k(b+c)+c,然后恰好與另一個指針在入口相遇。

時間復(fù)雜度 O ( N ) 時間復(fù)雜度O(N) 時間復(fù)雜度O(N)

空間復(fù)雜度 O ( 1 ) 空間復(fù)雜度O(1) 空間復(fù)雜度O(1)

代碼

哈希

public boolean hasCycle(ListNode head) {
        Set<ListNode> set = new HashSet();
        ListNode p = head;
        while(p!=null){
            if(!set.add(p)) return p;
            p = p.next;
        }
        return null;
    } 

時間復(fù)雜度 O ( N ) O(N) O(N)

空間復(fù)雜度 O ( N ) O(N) O(N)

快慢指針

public ListNode detectCycle(ListNode head) {
        if(head==null||head.next==null) return null;        
        ListNode vh = new ListNode(-1);
        vh.next = head;
        ListNode f = vh, s = vh;
        while(f!=null&&f.next!=null){ 
            f = f.next.next;
            s = s.next;
            if(f==s) break;
        } 
        if(f==null||f.next==null) return null;
        ListNode p = vh, q = f;
        while(p!=q){
            p = p.next;
            q = q.next;
        }
        return q;
    }

時間復(fù)雜度 O ( N ) O(N) O(N)

空間復(fù)雜度 O ( 1 ) O(1) O(1)

Tag

LinkedList

Hash

Two Pointers文章來源地址http://www.zghlxwxcb.cn/news/detail-619546.html

到了這里,關(guān)于【LeetCode 算法】Linked List Cycle II 環(huán)形鏈表 II的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu):帶環(huán)單鏈表基礎(chǔ)OJ練習(xí)筆記(leetcode142. 環(huán)形鏈表 II)(leetcode三題大串燒)

    數(shù)據(jù)結(jié)構(gòu):帶環(huán)單鏈表基礎(chǔ)OJ練習(xí)筆記(leetcode142. 環(huán)形鏈表 II)(leetcode三題大串燒)

    目錄 一.前言? 二.leetcode160.?相交鏈表? 1.問題描述 2.問題分析與求解 三.leetcode141.?環(huán)形鏈表 1.問題描述 2.代碼思路? 3.證明分析? 下一題會用到的重要小結(jié)論: 四.leetcode142.?環(huán)形鏈表 II 1.問題描述 2.問題分析與求解 Judgecycle接口: 方法一: 方法二:? 單鏈表和帶環(huán)單鏈表

    2023年04月08日
    瀏覽(20)
  • LeetCode //C - 92. Reverse Linked List II

    LeetCode //C - 92. Reverse Linked List II

    Given the head of a singly linked list and two integers left and right where left = right, reverse the nodes of the list from position left to position right , and return the reversed list. ? Example 1: Input: head = [1,2,3,4,5], left = 2, right = 4 Output: [1,4,3,2,5] Example 2: Input: head = [5], left = 1, right = 1 Output: [5] Constraints: The number of

    2024年02月11日
    瀏覽(24)
  • 環(huán)形鏈表、環(huán)形鏈表 II、有效的括號???????(leetcode)

    環(huán)形鏈表、環(huán)形鏈表 II、有效的括號???????(leetcode)

    目錄 一、環(huán)形鏈表 方法(快慢指針): 二、環(huán)形鏈表 II 三、有效的括號 給你一個鏈表的頭節(jié)點(diǎn)? head ?,判斷鏈表中是否有環(huán)。 如果鏈表中有某個節(jié)點(diǎn),可以通過連續(xù)跟蹤? next ?指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù)? pos ?來

    2024年02月04日
    瀏覽(19)
  • 環(huán)形鏈表、環(huán)形鏈表 II、有效的括號???????【LeetCode刷題日志】

    環(huán)形鏈表、環(huán)形鏈表 II、有效的括號???????【LeetCode刷題日志】

    目錄 一、環(huán)形鏈表 方法(快慢指針): 二、環(huán)形鏈表 II 三、有效的括號 給你一個鏈表的頭節(jié)點(diǎn)? head ?,判斷鏈表中是否有環(huán)。 如果鏈表中有某個節(jié)點(diǎn),可以通過連續(xù)跟蹤? next ?指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù)? pos ?來

    2024年02月03日
    瀏覽(20)
  • LeetCode:142. 環(huán)形鏈表 II

    LeetCode:142. 環(huán)形鏈表 II

    ??道阻且長,行則將至。?? ??算法,不如說它是一種思考方式?? 算法專欄: ????123 題目描述 :給定一個鏈表的頭節(jié)點(diǎn) head ,返回鏈表開始 入環(huán)的第一個節(jié)點(diǎn) 。 如果鏈表無環(huán),則返回 null 。 如果鏈表中有某個節(jié)點(diǎn),可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在

    2024年02月07日
    瀏覽(20)
  • LeetCode 142.環(huán)形鏈表II

    LeetCode 142.環(huán)形鏈表II

    題目鏈接 ?? LeetCode 142.環(huán)形鏈表II?? 給定一個鏈表的頭節(jié)點(diǎn) head ,返回鏈表開始入環(huán)的第一個節(jié)點(diǎn)。 如果鏈表無環(huán),則返回 null。 如果鏈表中有某個節(jié)點(diǎn),可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示

    2024年02月12日
    瀏覽(18)
  • 【Leetcode】142.環(huán)形鏈表II

    【Leetcode】142.環(huán)形鏈表II

    題意: 給定一個鏈表,返回鏈表開始入環(huán)的第一個節(jié)點(diǎn)。 如果鏈表無環(huán),則返回 null。 為了表示給定鏈表中的環(huán),使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環(huán)。 說明 :不允許修改給定的鏈表。 一開始我是這么寫的

    2024年02月16日
    瀏覽(18)
  • leetcode 142 環(huán)形鏈表II

    leetcode 142 環(huán)形鏈表II

    給定一個鏈表的頭節(jié)點(diǎn) head ,返回鏈表開始入環(huán)的第一個節(jié)點(diǎn)。 如果鏈表無環(huán),則返回 null。 如果鏈表中有某個節(jié)點(diǎn),可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從

    2024年02月01日
    瀏覽(22)
  • LeetCode刷題:142. 環(huán)形鏈表 II

    LeetCode刷題:142. 環(huán)形鏈表 II

    題目: 是否獨(dú)立解決: 否,參考了解題思路解決問題,思考了用快慢指針,棧,統(tǒng)計鏈表數(shù)量定位尾巴節(jié)點(diǎn)(因為是環(huán)形鏈表所以是死循環(huán),鏈表數(shù)量用while循環(huán)統(tǒng)計不出來)都沒解決 解題思路:這題其實和環(huán)形鏈表一樣的解題思路,用哈希set將數(shù)據(jù)都存儲進(jìn)去,如果發(fā)現(xiàn)

    2024年01月21日
    瀏覽(15)
  • ?LeetCode解法匯總142. 環(huán)形鏈表 II

    ?LeetCode解法匯總142. 環(huán)形鏈表 II

    https://github.com/September26/java-algorithms 給定一個鏈表的頭節(jié)點(diǎn) ? head ?,返回鏈表開始入環(huán)的第一個節(jié)點(diǎn)。? 如果鏈表無環(huán),則返回? null 。 如果鏈表中有某個節(jié)點(diǎn),可以通過連續(xù)跟蹤? next ?指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù)?

    2024年02月14日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包