# 0056.Merge Intervals
###### tags: `Leetcode` `Medium` `Merge Interval`
Link: https://leetcode.com/problems/merge-intervals/
## 思路
(这次是完全自己想的)
先对所有interval排序,首先根据interval的左端点,小的在前面,如果interval的左端点一样,那就看右端点哪个大,就哪个在前面。
然后跑loop,用现在的interval跟result里面的最后一个做比较,
如果现在的interval的左端点在result的最后一个interval里面,那么看右端点,
如果现在interval的右端点比result的最后一个interval的右端点大,那么就更新result的最后一个interval的右端点。
如果现在的interval的右端点不在result的最后一个interval里面,那么就把现在的interval加在result里面。
## Java的注意事项~
首先sort的写法,如果是给array排序(不管是几维的),可以用Arrays.sort,不需要用Collections.sort
comparator的写法是如果从小到大排就是(a,b)->(a-b),从大到小排就是(a,b)->(b-a)
还有就是把List[int[]]转换成int[][]的方法(下面例子中res是list)
```java
res.toArray(new int[res.size()][])
```
或者
```java
res.toArray(new int[0][])
```
后面的参数代表他要转到多大的array里面(虽然不知道为什么没有第二个参数,以及为什么第二个方法填0
## Code
```python=
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort()
ans = [intervals[0]]
for i in range(1, len(intervals)):
preInterval = ans[-1]
currInterval = intervals[i]
if currInterval[0]<=preInterval[1]:
ans[-1] = [preInterval[0], max(preInterval[1], currInterval[1])]
else:
ans.append(currInterval)
return ans
```
```java=
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> ans = new ArrayList<>();
Arrays.sort(intervals, (a,b)->(a[0]-b[0]));
ans.add(intervals[0]);
for(int i=1; i<intervals.length; i++){
int[] currInterval = intervals[i];
int[] prevInterval = ans.get(ans.size()-1);
if(prevInterval[1]<currInterval[0]) ans.add(currInterval);
else if(prevInterval[1]>currInterval[1]) continue;
else{
int l = Math.min(currInterval[0], prevInterval[0]);
int r = Math.max(currInterval[1], prevInterval[1]);
ans.remove(ans.size()-1);
ans.add(new int[]{l,r});
}
}
return ans.toArray(new int[ans.size()][]);
}
}
```
## Result
Runtime: 16 ms, faster than **88.05%** of C++ online submissions for Merge Intervals.
Memory Usage: 14.2 MB, less than **80.23%** of C++ online submissions for Merge Intervals.