Leetcode-D45-数组-56. 合并区间&57. 插入区间

一、复习

54、 螺旋矩阵,通过了,写起来难度不大——除了应该和rows、cols比大小,错写成col和row了。
我觉得这道题最神奇的地方就是方向移动的表示以及转变了——通过数组记录方向变化+利用%的机制实现循环妙啊!!!

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:     
        rows = len(matrix)
        cols = len(matrix[0])
        size = rows*cols
        directions = [[0,1],[1,0],[0,-1],[-1,0]]
        dir_index = 0
        row,col=0,0
        res=[]
        hash = [[False]*cols for _ in range(rows)]

        for i in range(size):
            item = matrix[row][col]
            res.append(item)
            hash[row][col]=True

            next_row=row+directions[dir_index][0]
            next_col = col+directions[dir_index][1]

            if next_row>=rows or next_col>=cols or hash[next_row][next_col]==True:
                dir_index = (dir_index+1)%4
                row=row+directions[dir_index][0]
                col = col+directions[dir_index][1]
            else:
                row = next_row
                col = next_col
        return res

56. 合并区间

1、感觉先用python sort(),然后直接O(n)复杂度判断就ok了。
2、刚开始写的时候发现,直接在interval上操作不行,不方便控制进行扩充数组大小的操作(找不到操作的位置),所以又设了一个数组res
3、忘记讨论右边界也在res最后一个里面的情况了。所以情况要想全。一共三种:完全大于;部分大雨;包含。

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort()
        res=[intervals[0]]
        for i in range(1,len(intervals)):
            if res[-1][1] >= intervals[i][1]:
                continue
            elif res[-1][1] >= intervals[i][0]:
                res[-1] = [res[-1][0],intervals[i][1]]
            else:
                res.append(intervals[i])
        return res

在这里插入图片描述
4、效率啥的非常低,看看别人的版本。
我感觉高赞答案和我的差不多,都是先将左区间排序,统一左区间的大小——即小的在前,然后相邻两个进行合并就只剩下三种情况了。逐一排序即可。

57. 插入区间

1、感觉先加入数组,然后再合并就好了。
2、没啥毛病,时间复杂度还挺强。

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        intervals.append(newInterval)
        intervals.sort()
        res = [intervals[0]]
        for i in range(1,len(intervals)):
            if res[-1][1]>=intervals[i][1]:
                continue
            elif res[-1][1]>=intervals[i][0]:
                res[-1]=[res[-1][0],intervals[i][1]]
            else:
                res.append(intervals[i])
        return res

在这里插入图片描述
3、看看别人咋写的,啊懒得看了。撤了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值