前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode】数组--合并区间(56)

【LeetCode】数组--合并区间(56)

作者头像
PM小王
发布2019-07-02 16:37:49
1.1K0
发布2019-07-02 16:37:49
举报
文章被收录于专栏:程序员小王程序员小王

写在前面

老粉丝可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的【贪心算法】已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天介绍的是第二个专题【数组】

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。

今日题目

给出一个区间的集合,请合并所有重叠区间。

示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

题目分析

先将目标区间数组从小到大排序,然后从第一个区间开始,如果相邻的两个区间,end小于start则合并区间,且生成新的区间,如果不小于,则放到返回区间,可以看下面几个例子。 [1,3][2,6] ->[1,6] 第一个区间的end大于等于第二个区间的start,同时第二个区间的end大于第一个区间的end。

[2,8][3,5] ->[2,8] 第一个区间的end大于等于第二个区间的start,同时第二个区间的end小于第一个区间的end。

[1,2][3,4] -> [1,2][3,4]

第一个区间的end小于第二个区间的start 。

代码实现

代码语言:javascript
复制
 1class Solution:
 2    def merge(self, intervals):
 3        """
 4        :type intervals: List[Interval]
 5        :rtype: List[Interval]
 6        """
 7        intervals.sort(key = lambda interval_tmp: interval_tmp.start)  
 8        N = len(intervals)
 9        s = []
10        for i in range(N):
11            flag = 0
12            for j in range(len(s)):
13                if not (intervals[i].start > s[j].end or intervals[i].end < s[j].start):
14                    s[j].start = min(intervals[i].start, s[j].start)
15                    s[j].end = max(intervals[i].end, s[j].end)
16                    flag = 1
17                    break
18            if flag == 0:
19                s.append(intervals[i])
20        return s

一切低效率的PASS都是耍流氓,今天拒绝耍流氓。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小王 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档