LeetCode第56题合并区间

简介: LeetCode第56题"合并区间"的解题方法,通过排序区间并判断重叠后进行合并,有效解决了区间合并问题。

继续打卡算法题,今天学习的是LeetCode第56题合并区间,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

image.png

分析一波题目

看完题目,这个题目还是比较好理解的,解决这个题目,我们只要保证区间集合是有序的,接下来我们只要判断两个区间重叠,然后合并两个区间。

区间重叠怎么判断呢?

image.png

比如上面两个区间,我们发现只要一个区间的开始小于前一个区间的结尾,那么他们就是重叠的。

接下来就只剩下合并区间了。

合并两个区间,我们计算两个区间开始最小值两个区间的最大值,这样就得到了合并后的区间。

本题解题技巧

1、按区间左边界升序排序

2、理解重叠区间

3、掌握合并两个区间

编码解决

class Solution {
   
   
    public int[][] merge(int[][] intervals) {
   
   
        //存储结果
        LinkedList<int[]> result = new LinkedList<>();
        //按左边界排序
        Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
        //第一个先加入结果
        result.add(intervals[0]);
        //从第二个开始判断是否重叠
        for (int i = 1; i < intervals.length; i++) {
   
   
            //和前面的重叠了
            if (intervals[i][0] <= result.getLast()[1]) {
   
   
                int start = result.getLast()[0];
                int end = Math.max(intervals[i][1], result.getLast()[1]);
                //合并之前,最后一个需要删除
                result.removeLast();
                //合并成新区间,并加入结果
                result.add(new int[]{
   
   start, end});
            }
            else {
   
   
                //没有重叠,加入结果
                result.add(intervals[i]);
            }         
        }
        return result.toArray(new int[result.size()][]);
    }
}

总结

本题并不难,只要知道重叠区间判断合并区间操作就可以解决本题。

相关文章
|
4月前
|
C++ Python
leetcode-56:合并区间
leetcode-56:合并区间
52 0
|
4月前
|
存储
【合并两个有序数组】LeetCode第88题讲解
【合并两个有序数组】LeetCode第88题讲解
|
29天前
|
算法
LeetCode第88题合并两个有序数组
文章分享了LeetCode第88题"合并两个有序数组"的解法,通过从后向前的合并策略避免了数组元素的前移,使用三个指针高效地完成了合并过程。
|
4月前
力扣56.合并区间
力扣56.合并区间
|
4月前
leetcode-88:合并两个有序数组
leetcode-88:合并两个有序数组
46 2
|
4月前
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
44 0
LeetCode | 88. 合并两个有序数组
LeetCode | 88. 合并两个有序数组
|
10月前
88.合并两个有序数组(LeetCode)
88.合并两个有序数组(LeetCode)
|
存储
图解LeetCode——56. 合并区间
图解LeetCode——56. 合并区间
113 1
【leetCode88】合并两个有序数组
【leetCode88】合并两个有序数组