力扣1139. 最大的以 1 为边界的正方形----Golang

给你一个由若干 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 为边界的正方形

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值