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

【每日一題Day281】LC142鏈表 Ⅱ| 快慢指針 哈希表

這篇具有很好參考價(jià)值的文章主要介紹了【每日一題Day281】LC142鏈表 Ⅱ| 快慢指針 哈希表。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

環(huán)形鏈表 Ⅱ【LC142】

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

如果鏈表中有某個(gè)節(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)識(shí)鏈表的實(shí)際情況。

不允許修改 鏈表。

作者:力扣 (LeetCode)
鏈接:https://leetcode-cn.com/leetbook/read/linked-list/jjhf6/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

哈希表
  • 思路:使用哈希表存放鏈表中的節(jié)點(diǎn),找到第一個(gè)在哈希表中重復(fù)出現(xiàn)的結(jié)點(diǎn),即為環(huán)的入口

  • 2021/12/9

    /**
     * Definition for singly-linked list.
     * class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */
    public class Solution {
        public ListNode detectCycle(ListNode head) {
            Set<ListNode> seen = new HashSet<>();  
            while(head!=null){
                if(!seen.add(head)){
                    return head;
                }
                head = head.next;
            }
            return null;      
        }
    }
    
  • 復(fù)雜度分析

    • 時(shí)間復(fù)雜度: O ( N ) O(N) O(N),其中 N N N是鏈表中的節(jié)點(diǎn)數(shù)。
    • 空間復(fù)雜度: O ( N ) O(N) O(N)
快慢指針
  • 2023/07/30

  • 思路:

    • 首先,由LC141可知,如果鏈表中存在環(huán),那么快慢指針會(huì)在環(huán)中相遇,但相遇的位置不一定是入環(huán)口,如下圖所示。設(shè)鏈表中環(huán)外部分的長度為a,慢指針進(jìn)入環(huán)后,又走了b的距離與快指針相遇。此時(shí),快指針已經(jīng)走完了環(huán)的n圈,因此快指針走過的總距離為 a + n ( b + c ) + b a+n(b+c)+b a+n(b+c)+b。

    • 由任意時(shí)刻,快指針走過的距離都為慢指針的2倍。因此,有
      a + ( n + 1 ) b + n c = 2 ( a + b ) ? ? > a = c + ( n ? 1 ) ( b + c ) a+(n+1)b+nc=2(a+b)--> a=c+(n-1)(b+c) a+(n+1)b+nc=2(a+b)??>a=c+(n?1)(b+c)

    • 可得從相遇點(diǎn)到入環(huán)點(diǎn)的距離加上n-1圈的環(huán)長,恰好等于從鏈表頭部到入環(huán)點(diǎn)的距離。

    • 因此,當(dāng)快慢指針相遇時(shí),再額外用一個(gè)指針指向鏈表頭部,隨后,它和慢指針每次向后移動(dòng)一個(gè)位置。最終,它們會(huì)在入環(huán)點(diǎn)相遇。

【每日一題Day281】LC142鏈表 Ⅱ| 快慢指針 哈希表,每日一題,鏈表,鏈表,散列表,數(shù)據(jù)結(jié)構(gòu)

  • 為什么慢指針入環(huán)第一圈沒走完的時(shí)候就會(huì)和快指針相遇?

    1. 首先,快指針先進(jìn)入環(huán)
    2. 當(dāng)慢指針剛到達(dá)環(huán)的入口時(shí),快指針此時(shí)在環(huán)中的某個(gè)位置(此時(shí)也可能相遇)
    3. 假設(shè)此時(shí)快慢指針的距離為x,若在步驟2相遇,則x=0
    4. 設(shè)環(huán)的周長為n,那么看成快指針追趕慢指針,需要追趕n-x個(gè)單位
    5. 快指針每次都追趕慢指針1個(gè)單位,那么慢指針走了n-x個(gè)單位,又因?yàn)閤>0,則慢指針走的路程小于等于n,因此慢指針走不完一圈就會(huì)與快指針相遇
  • 代碼

    public class Solution {
        public ListNode detectCycle(ListNode head) {
            ListNode slowNode = head;
            ListNode fastNode = head;
            while (fastNode != null && fastNode.next != null){
                slowNode = slowNode.next;
                fastNode = fastNode.next.next;
                if (slowNode == fastNode){
                    ListNode curNode = head;
                    while (curNode != fastNode ){
                        curNode = curNode.next;
                        fastNode = fastNode.next;
                    }
                    return curNode;
                }
            }
            
            return null;
        }
    }
    
  • 復(fù)雜度分析文章來源地址http://www.zghlxwxcb.cn/news/detail-617208.html

    • 時(shí)間復(fù)雜度: O ( N ) O(N) O(N),其中 N N N是鏈表中的節(jié)點(diǎn)數(shù)。
    • 空間復(fù)雜度: O ( 1 ) O(1) O(1)

到了這里,關(guān)于【每日一題Day281】LC142鏈表 Ⅱ| 快慢指針 哈希表的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 力扣hot100 環(huán)形鏈表 快慢指針 哈希 數(shù)學(xué)公式

    力扣hot100 環(huán)形鏈表 快慢指針 哈希 數(shù)學(xué)公式

    Problem: 142. 環(huán)形鏈表 II ????? 參考題解 ? 時(shí)間復(fù)雜度: O ( n ) O(n) O ( n ) ?? 空間復(fù)雜度: O ( 1 ) O(1) O ( 1 )

    2024年01月23日
    瀏覽(24)
  • 【每日一題Day282】LC2681英雄力量 | 排序+數(shù)學(xué)

    給你一個(gè)下標(biāo)從 0 開始的整數(shù)數(shù)組 nums ,它表示英雄的能力值。如果我們選出一部分英雄,這組英雄的 力量 定義為: i0 , i1 ,… ik 表示這組英雄在數(shù)組中的下標(biāo)。那么這組英雄的力量為 max(nums[i0],nums[i1] ... nums[ik])2 * min(nums[i0],nums[i1] ... nums[ik]) 。 請你返回所有可能的 非空

    2024年02月14日
    瀏覽(22)
  • 【每日一題Day168】LC2427公因子的數(shù)目 | 模擬

    給你兩個(gè)正整數(shù) a 和 b ,返回 a 和 b 的 公 因子的數(shù)目。 如果 x 可以同時(shí)整除 a 和 b ,則認(rèn)為 x 是 a 和 b 的一個(gè) 公因子 。 簡單模擬 感謝力扣 今天還要開會(huì) 我恨 感覺習(xí)慣真的很容易突然改變 前段時(shí)間還是看英文題目的 突然每一天就沒有看英文題了 然后這個(gè)習(xí)慣就沒有了

    2023年04月08日
    瀏覽(27)
  • 【每日一題Day222】LC1110刪點(diǎn)成林 | dfs后序

    給出二叉樹的根節(jié)點(diǎn) root ,樹上每個(gè)節(jié)點(diǎn)都有一個(gè)不同的值。 如果節(jié)點(diǎn)值在 to_delete 中出現(xiàn),我們就把該節(jié)點(diǎn)從樹上刪去,最后得到一個(gè)森林(一些不相交的樹構(gòu)成的集合)。 返回森林中的每棵樹。你可以按任意順序組織答案。 又是一段瓶頸期 2023/5/30 思路 遍歷樹時(shí),如果

    2024年02月07日
    瀏覽(26)
  • 【每日一題Day256】LC2600K 件物品的最大和

    袋子中裝有一些物品,每個(gè)物品上都標(biāo)記著數(shù)字 1 、 0 或 -1 。 給你四個(gè)非負(fù)整數(shù) numOnes 、 numZeros 、 numNegOnes 和 k 。 袋子最初包含: numOnes 件標(biāo)記為 1 的物品。 numZeroes 件標(biāo)記為 0 的物品。 numNegOnes 件標(biāo)記為 -1 的物品。 現(xiàn)計(jì)劃從這些物品中恰好選出 k 件物品。返回所有可行

    2024年02月12日
    瀏覽(43)
  • 【每日一題Day224】LC2517禮盒的最大甜蜜度 | 二分答案

    禮盒的最大甜蜜度【LC2517】 You are given an array of positive integers price where price[i] denotes the price of the ith candy and a positive integer k . The store sells baskets of k distinct candies. The tastiness of a candy basket is the smallest absolute difference of the prices of any two candies in the basket. Return the maximum tastiness of a

    2024年02月07日
    瀏覽(19)
  • 【每日一題Day262】LC1911最大子序列交替和 | dp

    最大子序列交替和【LC1911】 一個(gè)下標(biāo)從 0 開始的數(shù)組的 交替和 定義為 偶數(shù) 下標(biāo)處元素之 和 減去 奇數(shù) 下標(biāo)處元素之 和 。 比方說,數(shù)組 [4,2,5,3] 的交替和為 (4 + 5) - (2 + 3) = 4 。 給你一個(gè)數(shù)組 nums ,請你返回 nums 中任意子序列的 最大交替和 (子序列的下標(biāo) 重新 從 0 開始編

    2024年02月15日
    瀏覽(21)
  • 【每日一題Day191】LC2423刪除字符使頻率相同 | 枚舉 分類討論

    給你一個(gè)下標(biāo)從 0 開始的字符串 word ,字符串只包含小寫英文字母。你需要選擇 一個(gè) 下標(biāo)并 刪除 下標(biāo)處的字符,使得 word 中剩余每個(gè)字母出現(xiàn) 頻率 相同。 如果刪除一個(gè)字母后, word 中剩余所有字母的出現(xiàn)頻率都相同,那么返回 true ,否則返回 false 。 注意: 字母 x 的 頻

    2024年02月01日
    瀏覽(29)
  • 【每日一題Day208】LC1335工作計(jì)劃的最低難度 | 動(dòng)態(tài)規(guī)劃

    工作計(jì)劃的最低難度【LC1335】 你需要制定一份 d 天的工作計(jì)劃表。工作之間存在依賴,要想執(zhí)行第 i 項(xiàng)工作,你必須完成全部 j 項(xiàng)工作( 0 = j i )。 你每天 至少 需要完成一項(xiàng)任務(wù)。工作計(jì)劃的總難度是這 d 天每一天的難度之和,而一天的工作難度是當(dāng)天應(yīng)該完成工作的最大

    2024年02月05日
    瀏覽(29)
  • 【每日一題Day267】LC834樹中距離之和 | 換根dp

    樹中距離之和【LC834】 給定一個(gè)無向、連通的樹。樹中有 n 個(gè)標(biāo)記為 0...n-1 的節(jié)點(diǎn)以及 n-1 條邊 。 給定整數(shù) n 和數(shù)組 edges , edges[i] = [ai, bi] 表示樹中的節(jié)點(diǎn) ai 和 bi 之間有一條邊。 返回長度為 n 的數(shù)組 answer ,其中 answer[i] 是樹中第 i 個(gè)節(jié)點(diǎn)與所有其他節(jié)點(diǎn)之間的距離之和。

    2024年02月16日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包