LeetCode 56. 合并區(qū)間

56. 合并區(qū)間


題目來源:https://leetcode-cn.com/problems/merge-intervals

題目


給出一個(gè)區(qū)間的集合,請合并所有重疊的區(qū)間米酬。

示例 1:

輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區(qū)間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].

示例 2:

輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區(qū)間 [1,4] 和 [4,5] 可被視為重疊區(qū)間沛豌。

解題思路


思路:貪心算法

首先需要對題意進(jìn)行理解(以示例 1,示例 2 為例):

示例 1:

示例 1

示例 2:

示例 2

上面示圖中赃额,線段比例并非準(zhǔn)確的比例加派,這里僅當(dāng)做輔助理解。

結(jié)合上面的圖以及示例輸出的結(jié)果可看出: 對區(qū)間進(jìn)行合并跳芳,那么兩個(gè)區(qū)間之間必然會有交集的部分芍锦。再看示例 2,這里交集的部分也可以是一個(gè)點(diǎn)飞盆。

同樣需要注意的地方是: 這里有個(gè)前提娄琉,就是需要區(qū)間要按照左端點(diǎn)進(jìn)行升序排序。

對給定的列表進(jìn)行排序后吓歇,同時(shí)添加結(jié)果集孽水,結(jié)合兩者進(jìn)行判斷是否有交集,從而決定是否要合并區(qū)間城看。

具體的算法:

  • 對區(qū)間進(jìn)行排序女气,以區(qū)間左端點(diǎn)為準(zhǔn)進(jìn)行升序排序,然后進(jìn)行遍歷测柠;
  • 如果遍歷的區(qū)間左端點(diǎn) > 結(jié)果集最后一個(gè)區(qū)間的右端點(diǎn)主卫,那么表示沒有交集,這里直接將區(qū)間添加到結(jié)果集即可鹃愤;
  • 如果遍歷的區(qū)間左端點(diǎn) <= 結(jié)果集中最后一個(gè)區(qū)間的右端點(diǎn)完域,那么說明有交集凹耙,這里需要對區(qū)間進(jìn)行合并。具體的做法:對結(jié)果集中最后一個(gè)區(qū)間的右端點(diǎn)進(jìn)行更新(這里取兩個(gè)區(qū)間的大值)

對于上面產(chǎn)生交集的情況,將最后一個(gè)區(qū)間的右端點(diǎn)進(jìn)行更新為最大拌屏,達(dá)到合并更多區(qū)間的結(jié)果,這就是貪心策略端圈。

具體實(shí)現(xiàn)的代碼如下:

代碼實(shí)現(xiàn)


class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        # 對數(shù)組進(jìn)行升序刚照,以數(shù)組元素區(qū)間左端為準(zhǔn)
        intervals.sort(key=lambda x: x[0])

        # 定義返回?cái)?shù)組
        ret = []

        # 這里合并的依據(jù)是區(qū)間一定是有交集的
        # 即是一個(gè)區(qū)間左端點(diǎn) <= 另一個(gè)區(qū)間右端點(diǎn)

        # 反之則沒有交集,則不需要合并
        # 此時(shí),一個(gè)區(qū)間的左端點(diǎn) > 另一個(gè)區(qū)間的右端點(diǎn)

        # 這里主要比較的是排序后的數(shù)組區(qū)間與返回?cái)?shù)組的最后一個(gè)區(qū)間
        for interval in intervals:
            # 返回?cái)?shù)組為空時(shí)诉濒,先直接將第一個(gè)添加到數(shù)組
            # 當(dāng)返回?cái)?shù)組不為空時(shí)专挪,則根據(jù)上面的依據(jù)進(jìn)行區(qū)分
            # 先看返回?cái)?shù)組為空迫卢,或者區(qū)間沒有交集的情況
            if not ret or interval[0] > ret[-1][1]:
                ret.append(interval)
            # 返回?cái)?shù)組不為空幻捏,有交集的情況,合并區(qū)間
            # 更新返回?cái)?shù)組最后一個(gè)區(qū)間的右端點(diǎn)篡九,取兩區(qū)間的大值
            else:
                ret[-1][1] = max(ret[-1][1], interval[1])

        return ret

實(shí)現(xiàn)結(jié)果


實(shí)現(xiàn)結(jié)果

以上就是使用貪心算法的思路谐岁,判斷區(qū)間是否可以合并,需要先對區(qū)間進(jìn)行排序榛臼,確定區(qū)間之間是否有交集伊佃,以此為依據(jù)更新結(jié)果集,進(jìn)而解決《56. 合并區(qū)間》問題的主要內(nèi)容沛善。


歡迎關(guān)注微信公眾號《書所集錄》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末航揉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子金刁,更是在濱河造成了極大的恐慌帅涂,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尤蛮,死亡現(xiàn)場離奇詭異媳友,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)产捞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門醇锚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坯临,你說我怎么就攤上這事焊唬。” “怎么了看靠?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵赶促,是天一觀的道長。 經(jīng)常有香客問我挟炬,道長鸥滨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任辟宗,我火速辦了婚禮,結(jié)果婚禮上吝秕,老公的妹妹穿的比我還像新娘泊脐。我一直安慰自己,他們只是感情好烁峭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布容客。 她就那樣靜靜地躺著秕铛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缩挑。 梳的紋絲不亂的頭發(fā)上但两,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音供置,去河邊找鬼谨湘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芥丧,可吹牛的內(nèi)容都是我干的紧阔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼续担,長吁一口氣:“原來是場噩夢啊……” “哼擅耽!你這毒婦竟也來了物遇?” 一聲冷哼從身側(cè)響起询兴,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蕉朵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后冷蚂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汛闸,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诸老,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年蹄衷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厘肮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耍属,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出示启,到底是詐尸還是另有隱情概漱,我是刑警寧澤篙挽,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布提揍,位于F島的核電站,受9級特大地震影響劳跃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刨仑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杉武。 院中可真熱鬧,春花似錦飞涂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蘸秘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間醋虏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工毛秘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粘舟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓柑肴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親适秩。 傳聞我的和親對象是個(gè)殘疾皇子硕舆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容