给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
幸运数是指矩阵中满足同时下列两个条件的元素:
在同一行的所有元素中最小
在同一列的所有元素中最大
image.png
解题思路:
- 模拟,选出每一行的最小值,每一列的最大值;
- 再遍历依次,匹配。
Python3代码:
class Solution:
def luckyNumbers (self, matrix: List[List[int]]) -> List[int]:
m, n = len(matrix), len(matrix[0])
row = [1e9]*m # 每行的最小值
col = [0]*n # 每列的最大值
for i in range(m):
for j in range(n):
row[i] = min(row[i], matrix[i][j])
col[j] = max(col[j], matrix[i][j])
ans = []
for i in range(m):
for j in range(n):
if matrix[i][j] == row[i] and matrix[i][j] == col[j]:
ans.append(matrix[i][j])
return ans
class Solution:
def luckyNumbers (self, matrix: List[List[int]]) -> List[int]:
# 行最小、列最大
mines = {min(rows) for rows in matrix}
maxes = {max(columns) for columns in zip(*matrix)}
return list(mines & maxes)
网友评论