合並區間
阿新 • • 發佈:2019-05-03
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]的值 intcur = 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; } };
合並區間