力扣刷题-python-73、74

1.73. 矩阵置零 - 力扣

73. 矩阵置零 - 力扣(LeetCode) (leetcode-cn.com)
两维遍历,同时将为0的列用集合保存,同时读完一行,判断0是否在里面,如果在里面将行置零。
最后将集合中的列置为0

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        #读取行并保存列为0的
        m,n =len(matrix), len(matrix[0])
        colindex = set()
        for row in range(m):
            for col in range(n):
                 if not matrix[row][col]:  colindex.add(col)
            if 0 in matrix[row]: matrix[row] = [0]*n

        for row in range(m):
            for _ in colindex: matrix[row][_]=0

2.74. 搜索二维矩阵

74. 搜索二维矩阵 - 力扣(LeetCode) (leetcode-cn.com)
有暴力方法

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        #肯定先遍历行的末数字,判断是否大于target
        #如果大于,再遍历行
        #但是遍历时候可以用半拉选取法
        if target<matrix[0][0] or target>matrix[-1][-1]: return False   #处理不在范围内
        for i in matrix:
            if target <= i[-1]: 
                for j in i : 
                    if not j-target:  return True
                return False
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        #肯定先遍历行的末数字,判断是否大于target
        #如果大于,再遍历行
        #但是遍历时候可以用半拉选取法
        for i in matrix:
            for j in i : 
                if not j-target:  return True
        return False

二分法

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        #肯定先遍历行的末数字,判断是否大于target
        #如果大于,再遍历行
        #但是遍历时候可以用二分法
        
        if target<matrix[0][0] or target>matrix[-1][-1]: return False   #处理不在范围内
        m,n = len(matrix),len(matrix[0])

        sarter,ender = 0, m-1   #二分法
        while ender>=sarter:
            center = (ender+sarter)//2
            if target < matrix[center][0]:    ender= center-1
            elif target > matrix[center][-1]: sarter= center+1
            else: break
        row = center
        sarter,ender = 0, n-1   #二分法
        while ender>=sarter:
            center = (ender+sarter)//2
            if target < matrix[row][center]: ender= center-1
            elif target > matrix[row][center]: sarter= center+1
            else:return True
        return False



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值