1.題目描敘
給出乙個區間的集合,請合併所有重疊的區間。
示例 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]可被1視為重疊區間
2.思路
看到示例1時,我們會發現通過比較當前位置的第二個元素和下乙個位置的第乙個元素的大小,前者大於等於後者,就可以將兩區間合併成乙個新區間,然後用著新區間的第二個元素繼續比較即可,前者小於後者,我們就可以把當前區間拿走了,跳到下乙個區間重複上述步驟即可,如果你以為就這樣完了,那這就只能是個簡單題了。
我們觀察後會發現示例1是有序的,第乙個元素和第二個元素都是不遞減的,可如果打亂一下,就不能按我們上述思路去解了,所以首先我們第一步就是給區間排序,然後才是上面的方法。
給定區間集合nums
設定[left,right]儲存合併後區間
1.對nums進行排序,left,right取第乙個區間的左右邊界;
2.比較right和nums[i][0]的大小
1.right>=nums[i][0]:right=right>nums[i][1]?right:nums[i][1]//如果當前區間的右邊界大於right,更新right
2.right3.**實現vector> merge(vector>& intervals) ;
sort(intervals.begin(),intervals.end());
vector>ans;
int left=intervals[0][0];//用來儲存合併區間的左右邊界
int right=intervals[0][1];
for(int i=1;iright?intervals[i][1]:right;
}else);
left=intervals[i][0];
right=intervals[i][1];}}
ans.push_back();
return ans;
}
Leetcode 56 合併區間
對所有區間按起點位置進行排序 遍歷到k點後的 l,r 已知的包含k點的最大區間 遍歷到k 1點,若該起點屬於 l,r 那麼可能擴充套件這個區間的終點,r max r,k 1點的end definition for an interval.struct interval interval int s,...
LeetCode 56 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 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 可被視為重疊區間。解題思路 1...
LeetCode 56 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 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 可被視為重疊區間。題意還是好理...