160. 56. 57. | 區(qū)間合并類型 LeetCode
?

?分析:
暴力解法,分別遍歷兩個(gè)鏈表,判斷a鏈表是否有結(jié)點(diǎn)存在于b鏈表中。
哈希表解法,遍歷a鏈表,將a鏈表的結(jié)點(diǎn)用哈希表存儲,再遍歷b鏈表,判斷b鏈表中是否有結(jié)點(diǎn)存在于哈希表中。

雙指針法:
該方法核心思路在于消除兩個(gè)鏈表的長度差異,由題目可得知,鏈表的相交部分是相同的,存在差異的只有前面不重疊的那部分,而兩個(gè)鏈表的長度是可能不同的。如果我們能夠把長鏈表多出來的那部分差異給消除,就能夠通過遍歷來得到相交的部分。
設(shè)置兩個(gè)指針,分別指向a,b兩個(gè)鏈表;a,b兩個(gè)指針同時(shí)遍歷鏈表;當(dāng)其中某個(gè)指針遍歷到結(jié)尾的時(shí)候,將其指向另一個(gè)鏈表的起始位置;新的a,b指針繼續(xù)遍歷鏈表,直到另一個(gè)指針也遍歷到結(jié)尾并指向另一個(gè)鏈表的起始位置;此時(shí),a,b指針同時(shí)開始重新遍歷鏈表,當(dāng)a,b指針相同的時(shí)候,得到相交的結(jié)點(diǎn)。

? 理解了雙指針方法的核心思路后,我們可以對代碼進(jìn)行優(yōu)化,只需要在一次遍歷中,同時(shí)判斷雙指針是否到達(dá)了結(jié)尾,或者是相同。



分析:
??具體分析看官方已經(jīng)講解的十分詳細(xì),簡單來講就是連續(xù)區(qū)間在排序后一定互相臨近,因此對可合并的連續(xù)區(qū)間,只需要求出其上界和下屆即可。
https://leetcode-cn.com/problems/merge-intervals/solution/he-bing-qu-jian-by-leetcode-solution/



分析:
? 題目提供的是已經(jīng)排好序的區(qū)間列表,因此我們只需要將新的區(qū)間和列表中的區(qū)間進(jìn)行比較,然后合并插入即可。

新區(qū)間不與當(dāng)前區(qū)間重疊,則將當(dāng)前區(qū)間添加到輸出列表中;若新區(qū)間還未添加到輸出列表中,則將新區(qū)間添加到輸出列表中。
新區(qū)間左邊界大于當(dāng)前區(qū)間的右邊界
新區(qū)間的右邊界小于當(dāng)前區(qū)間的左邊界
新區(qū)間與當(dāng)前區(qū)間重疊,則合并兩個(gè)區(qū)間,并將合并后的區(qū)間當(dāng)做新區(qū)間,進(jìn)行下一步判斷。
若新區(qū)間不與當(dāng)前區(qū)間重疊,且循環(huán)已經(jīng)結(jié)束,則將新區(qū)間添加到輸出列表的最后面。
? 我們只需要考慮三種情況:
圖解:



代碼:
