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