力扣1380. 矩阵中的幸运数
由于题目中已说明矩阵中数字各不相同,不用考虑去重的情况,可以直接模拟逻辑来实现,先找出每一行的所有元素中的最小值存到数组中,再找出每一列的所有元素中最大值存到数组中,如果两数相等,即为最后的结果。
Python实现:
from typing import List
def luckyNumbers(matrix: List[List[int]]) -> List[int]:
rows_min = [min(rows) for rows in matrix] # 每行中最小值,下标即为列号
cols_max = [max(cols) for cols in zip(*matrix)] # 每列中最大值,下标即为行号
res = []
print(rows_min) # [3, 9, 15]
print(cols_max) # [15, 16, 17]
for i, row in enumerate(matrix):
for j, value in enumerate(row):
if value == rows_min[i] and value == cols_max[j]:
res.append(value)
return res
matrix = [[3, 7, 8], [9, 11, 13], [15, 16, 17]]
print(luckyNumbers(matrix)) # [15]
对于Golang,其math库中包含max/min函数,但是针对float64类型的,没有int整型,所以需要自己实现。
Golang实现:
package main
import "fmt"
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func luckyNumbers(matrix [][]int) []int {
a, b := 0, 100005
for _, row := range matrix {
cur := 100005
for _, v := range row {
cur = min(v, cur) // 维护行的最小值
}
a = max(a, cur)
}
for j := 0; j < len(matrix[0]); j++ {
cur := 0
for i := 0; i < len(matrix); i++ {
cur = max(matrix[i][j], cur) // 找到列中的最大值
}
b = min(b, cur)
}
if a == b {
return []int{a}
}
return []int{}
}
func main() {
var matrix = [][]int{{3, 7, 8}, {9, 11, 13}, {15, 16, 17}}
fmt.Println(matrix) // [[3 7 8] [9 11 13] [15 16 17]]
fmt.Println(luckyNumbers(matrix)) // [15]
}
(ps: 简单预告下,本周末前将会整理出一篇关于python转到golang的语法区别,以及分享一些阿巩自己总结的小方法🌈)
END