56.合并區(qū)間

題目
給出一個區(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ū)間。

思路
構建了一個Lambda表達式表達式,用于排列intervals的首位,這句話是這個算法的關鍵之處
sort(intervals.begin(), intervals.end(), [](Interval& a, Interval& b){return a.start < b.start;});

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> merge(vector<Interval>& intervals) {
        
        if(intervals.empty()) return {};
        sort(intervals.begin(), intervals.end(), [](Interval& a, Interval& b){return a.start < b.start;});
        
        vector<Interval> res{intervals[0]};
        
        for(int i = 1; i < intervals.size(); i++)
        {
            if(res.back().end < intervals[i].start)
            {
                res.push_back(intervals[i]);
            }
            else
            {
                res.back().end = max(res.back().end, intervals[i].end);
            }
        }
        return res;
    }
};

2、

class Solution {
public:
    vector<Interval> merge(vector<Interval>& intervals) {
         vector<Interval> result;
         if (intervals.size() == 0) {
             return result;
         }
         sort(intervals.begin(), intervals.end(), 
         [] (const Interval& I1, const Interval& I2) 
            {return I1.start < I2.start; });
         int left = intervals[0].start, right = intervals[0].end;
         for (int i = 1; i < intervals.size(); ++i) {
             if (intervals[i].start <= right) {
                 right = max(right,intervals[i].end);
             }
             else {
                 result.push_back(Interval(left,right));
                 left = intervals[i].start;
                 right = intervals[i].end;
             }
         }
         result.push_back(Interval(left,right));
         return result;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 給出一個區(qū)間的集合,請合并所有重疊的區(qū)間。 示例 1: 示例 2: 代碼
    vbuer閱讀 291評論 0 0
  • 過往 踏過山河 披荊斬棘 只怪 時間匆匆 容顏已改 只愿 回憶漫步 一切安好 我回頭望去 田邊小溪 嘩嘩流淌 魚兒...
    漫步文學世界閱讀 163評論 0 1
  • 迎風奔跑 夜色漸深, 整個校園被夜色籠罩著。 我透過窗戶去仰望它, 靜靜的夜空,只掛著一輪約隱約現的明月, 沒有璀...
    c迎風奔跑閱讀 191評論 8 6
  • 【全國第一部 95后青春派聯合力作 寫盡當代女大學生的細膩生態(tài)】 《不見》35:火災 作者:東山媚娘 (上接34 ...
    高校傳媒與寫作協(xié)會閱讀 383評論 3 3
  • 上次回家,女兒給我下載了一只電子寵物——會說話的TOM貓,她說特可愛,讓我?guī)退B(yǎng)著。我覺得太麻煩,說我沒時間,可能...
    石竹閱讀 382評論 2 2

友情鏈接更多精彩內容