本文主要是介绍【Leetcode56】合并区间(数组 | 排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、题目
- 二、思路
- 三、代码
一、题目
二、思路
- 先将所有子列表按照
start_pos
进行排序,有利于保持顺序性,每次处理新子列表时,只用和结果列表ans_lst
的最后一个子列表对比,如果有重合则合并,然后将合并的新子列表插入结果列表 - 排序可以使用
lambda
函数,intervals.sort(key=lambda x: x[0])
- 因为使用了sort,所以时间复杂度O(nlogn),空间复杂度O(n)
三、代码
class Solution(object):def merge(self, intervals):""":type intervals: List[List[int]]:rtype: List[List[int]]"""ans_lst = []intervals.sort(key=lambda x: x[0])for i in range(len(intervals)):this_lst = intervals[i]if i == 0:ans_lst.append(this_lst)continueelse:# 从第二个子列表开始past_lst = ans_lst[-1]if past_lst[1] >= this_lst[0]:# 有重叠new_one_lst = [min(past_lst[0], past_lst[1], this_lst[0], this_lst[1]), max(past_lst[0], past_lst[1], this_lst[0], this_lst[1])]ans_lst.pop()ans_lst.append(new_one_lst)else:# 没有重叠ans_lst.append(this_lst)return ans_lst
这篇关于【Leetcode56】合并区间(数组 | 排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!