LeetCode之合并区间

简介: 笔记

今天在LeetCode上面做了一道排序题:合并区间。该题也不算太难,先用非常暴力的方法解决了。该步骤如下:

1.初始化每一个区间的最小值min与最大值max

2.遍历所有区间,找到区间下限最小的那个,并用min,max记入。

3.删除步骤2找到的区间

4.遍历剩下的所有区间,如果该区间的最小值小于或等于步骤2中的最大值,记入该区间的最大值。

5.如果该区间的最大值大于max,那么max 就等于该最大值。

6.重复步骤4,5若干次,并在结束后删除所有符合步骤4的区间,添加【min,max】为合并后的区间

7.但剩下的区间数大于零时,重复操作上述过程

 def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        lists = []
        while (len(intervals)>0):
            min = 100000
            index = 0
            for a in range(len(intervals)):
                if min> intervals[a][0]:
                    min = intervals[a][0] 
                    max = intervals[a][1]
                    index = a 
            intervals.remove(intervals[index])
            n = 10
            while(n):
                re = []
                for a in range(len(intervals)):
                    if max >= intervals[a][0]:
                        if max <= intervals[a][1]:
                            max = intervals[a][1]
                        re.append(intervals[a])
                n -= 1
                intervals = [a for a in intervals if a not in re]
            lists.append([min,max])
        return lists

上述操作没有涉及的如何算法的思想,下面让我们在用另外一种操作,先按区间的最小值排好序,然后再遍历。排序后可以合并的区间是连续的,这样就省去了上面的步骤6的重复操作4,5,从而提高了程序的效率。

具体步骤就不写了,基本与上面的相似。

 def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key=lambda x: x[0])
        merges = []
        for a in intervals:
            if not merges or merges[-1][-1] < a[0]:
                merges.append(a)
            else:
                if merges[-1][-1] < a[-1]:
                    merges[-1][-1] = a[-1]
        return merges

Thank for your time !!

ps: 参考LeetCode官方解析。

公众号:FPGA之旅

目录
相关文章
|
2天前
|
算法
Leetcode第57题(插入区间)
LeetCode第57题“插入区间”的解题方法,包括题目描述、示例、算法思路和代码实现,旨在解决将新区间插入有序且不重叠的区间列表中,并合并重叠区间的问题。
9 0
Leetcode第57题(插入区间)
|
2月前
|
算法
LeetCode第57题插入区间
LeetCode第57题"插入区间"的解题方法,利用原区间集有序的特性,通过三步插入操作,有效实现了新区间的插入和重叠区间的合并。
LeetCode第57题插入区间
|
3月前
|
Java
力扣经典150题第五十八题:合并两个有序链表
力扣经典150题第五十八题:合并两个有序链表
36 2
|
4月前
|
存储 算法 测试技术
力扣经典150题第四十七题:汇总区间
力扣经典150题第四十七题:汇总区间
33 1
|
4月前
|
存储 SQL 算法
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
|
4月前
|
存储 算法 搜索推荐
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
|
4月前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
4月前
|
存储 传感器 算法
LeetCode题目89:格雷码 递归、迭代及位操作在数组合并中的应用
LeetCode题目89:格雷码 递归、迭代及位操作在数组合并中的应用
|
4月前
|
存储 算法 测试技术
力扣经典150题第四十九题:插入区间
力扣经典150题第四十九题:插入区间
20 0
|
4月前
|
存储 算法 测试技术
力扣经典150题第四十八题:合并区间
力扣经典150题第四十八题:合并区间
44 0