1. 程式人生 > >合並區間

合並區間

cto style lee problems -i div tro get pub

類型:數組

解題工具:C++ 語言

地址: https://leetcode-cn.com/problems/merge-intervals/

執行用時 : 36 ms, 在Merge Intervals的C++提交中擊敗了38.34% 的用戶

內存消耗 : 12.4 MB, 在Merge Intervals的C++提交中擊敗了5.08% 的用戶

/*
** 給出一個區間的集合,請合並所有重疊的區間。
** 示例 1:
** 輸入: [[1,3],[2,6],[8,10],[15,18]]
** 輸出: [[1,6],[8,10],[15,18]]
** 解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合並為 [1,6].
** 示例 2:
** 輸入: [[1,4],[4,5]]
** 輸出: [[1,5]]
** 解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
*/
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        int len = intervals.size();
        sort(intervals.begin(), intervals.end());  // 對起始區間進行排序
        vector<vector<int >> res;
        for (int i = 0; i < len;){
            
int pointer = i; int maxn = intervals[i][1]; // maxn定義為當前合並區間的最大值 while(pointer+1 < len){ if(intervals[pointer][1] >= intervals[pointer+1][0]) // 區間重合 pointer++; else{ // 區間不重合,向前查找,直到找到一個大於intervals[pointer+1][0]的值 int
cur = pointer; while(cur>=0 && intervals[cur][1] < intervals[pointer+1][0]) cur--; if(cur>=0) pointer++; // 找到了,pointer++ else break; // 找不到,跳出 } maxn = max(maxn,intervals[pointer][1]); } res.push_back({intervals[i][0],maxn}); i = pointer + 1; } return res; } };

合並區間