文章目录
-
- [1. 题目来源](#1. 题目来源)
- [2. 题目解析](#2. 题目解析)
1. 题目来源
题单:
- 待补充
2. 题目解析
2025年03月25日18:10:00
矩形的三种遍历方式吧:
- 行遍历
- 列遍历
- 对角线遍历
其中对角线遍历在 八皇后 问题中还遇见过,正对角线,反对角线,两种。其实就是对角线上的点的 和、差 是有一定规律的。
这里简单写一个对角线遍历的模板吧,其他的都是同理。主要学习以下几点:
- 公式化推导。
- 遍历,就是需要得到最大值、最小值即可。
视屏讲解参考:
具体的分析,见下图:
- 时间复杂度 : O ( n m ) O(nm) O(nm)
- 空间复杂度 : O ( 1 ) O(1) O(1)
go
func sortMatrix(grid [][]int) [][]int {
n, m := len(grid), len(grid[0])
for k := 1; k < m + n; k ++ {
minJ := max(0, m - k)
maxJ := min(m - 1, n - 1 - k + m)
col := []int{}
for j := minJ; j <= maxJ; j ++ {
col = append(col, grid[j + k - m][j])
}
if minJ > 0 {
slices.Sort(col)
} else {
slices.SortFunc(col, func(a, b int) int { return b - a }) // 降序排列
}
for j := minJ; j <= maxJ; j ++ {
grid[j + k - m][j] = col[j - minJ]
}
}
return grid
}