机试打卡 -15 合并区间(数组)

 


思路:先排序,再依次合并

我的代码↓

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:

        ans_list=[]

        # 先将intervals的start从小到大排序
        sorted_intervals=sorted(intervals,key=lambda x:x[0])

        index=0

        while True:
            
            # 边界
            left=sorted_intervals[index][0]
            right=sorted_intervals[index][1]
            
            # 若下一组区间可以合并
            while index<len(sorted_intervals)-1 and right>=sorted_intervals[index+1][0]:
                index+=1
                right=max(right,sorted_intervals[index][1])

            ans_list.append([left,right])

            if index==len(sorted_intervals)-1:
                return ans_list

            index+=1

官方题解:排序
 

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:

        intervals.sort(key=lambda x: x[0])

        merged = []

        for interval in intervals:

            # 如果列表为空,或者当前区间与上一区间不重合,直接添加
            if not merged or merged[-1][1] < interval[0]:
                merged.append(interval)
            else:
                # 否则的话,我们就可以与上一区间进行合并
                merged[-1][1] = max(merged[-1][1], interval[1])

        return merged
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值