###### tags: `Leetcode` `medium` `array` `python` `Top 100 Liked Questions`
# 56. Merge Intervals
## [題目連結:]https://leetcode.com/problems/merge-intervals/
## 題目:
Given an array of ```intervals``` where ```intervals[i] = [starti, endi]```, merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
**Example 1:**
```
Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
```
**Example 2:**
```
Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
```
## 解題想法:
兄弟題目: [57. Insert Interval](/eIk25ccNTuOVstZYvP122Q)
* 題目要求合併間格
* 先將每個間格[start,end]按照start排序
* 比較res[-1]的end與當前間格的start
* 若 res[-1]的end比較大
* 代表當前間格可以與其合併
* 則選res[-1]的end或是當前間格的end作為res[-1]新的end
* 否則表示當前間格並未與res重疊,加入res
* 示意圖:
```
1~~~3
2~~~6
8~~10
15~~18
res= [1,6] [8,10] [15,18]
```
## Python:
``` python=
class Solution(object):
def merge(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: List[List[int]]
"""
#按照間個中第一個數字由小到大排序
nums=sorted(intervals,key=lambda x:x[0])
res=[nums[0]]
for i in range(1,len(nums)):
#res的尾vs當前的頭
if res[-1][1]>=nums[i][0]:
res[-1][1]=max(res[-1][1],nums[i][1])
else:
res.append(nums[i])
return res
if __name__ == '__main__':
result = Solution()
intervals = [[1,3],[2,6],[8,10],[15,18]]
ans = result.merge(intervals)
print(ans)
```