原题链接:https://leetcode.cn/problems/maximum-strictly-increasing-cells-in-a-matrix/
优化动态规划
func maxIncreasingCells(mat [][]int) int {
// dp[i][j] 表示从其他点到[i,j]的最长路径
// rowMax[i] 表示第i行最大的dp[i][j]
// colMax[j] 表示第j列最大的dp[i][j]
// 这里将dp[i][j]优化成mx
m, n := len(mat), len(mat[0])
type pair struct {x, y int}
g := make(map[int][]pair)
for i, row := range mat {
for j, v := range row {
g[v] = append(g[v], pair{i ,j})
}
}
a := make([]int, 0, len(g))
for key := range g {
a = append(a, key)
}
sort.Ints(a)
rowMax := make([]int, m)
colMax := make([]int, n)
res := 0
for _, v := range a {
mx := make([]int, len(g[v]))
for i, pos := range g[v] {
mx[i] = max(rowMax[pos.x], colMax[pos.y]) + 1
res = max(res, mx[i])
}
for i, pos := range g[v] {
rowMax[pos.x] = max(rowMax[pos.x], mx[i])
colMax[pos.y] = max(colMax[pos.y], mx[i])
}
}
return res
}
func max(a, b int) int {
if a > b {
return a
}
return b
}