给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。
golang不可以像python那样直接操作切片取某一列
刚开始刷题,自己在那里写快写一天,也没有优化什么,暴力扫描。
func largest1BorderedSquare(grid [][]int) int {
var bord1, bord2 = 0, 0
var res, bord int
//var temp []int
for idx_E, val_E := range grid {
for idx_I, _ := range val_E {
//横
bord1 = until1(grid[idx_E][idx_I:])
// 取列
var temp []int
for _, s := range grid {
temp = append(temp, s[idx_I])
}
bord2 = until1(temp[idx_E:])
bord = min(bord1, bord2)
//检查
if bord >= 1 {
for {
bord1 = until1(grid[idx_E+bord-1][idx_I : bord+idx_I])
temp = []int{}
for _, s := range grid {
temp = append(temp, s[idx_I+bord-1])
}
bord2 = until1(temp[idx_E : idx_E+bord])
if bord == bord2 && bord1 == bord {
break
} else {
bord = bord - 1
}
}
}
res = max(res, bord)
}
}
return res * res
}
func max(a, b int) int {
if b <= a {
return a
}
return b
}
func min(a, b int) int {
if a <= b {
return a
}
return b
}
func until1(subgrid []int) int {
var l int
for i := 0; i < len(subgrid); i++ {
if subgrid[i] != 0 {
l++
} else {
break
}
}
return l
}
没学过数据结构算法,不知道一些基础的算法代码,一开始刷题真是太费时间了,建议先跟着答案写吧,写多了看多了估计就会了。
题目:最大的以 1 为边界的正方形