题目描述
在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。
最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。
建筑物高度可以增加的最大总和是多少?
解题代码
// 贪心来做
func maxIncreaseKeepingSkyline(grid [][]int) int {
res := 0
var LAndR = make([]int, len(grid))
var FAndA = make([]int, len(grid[0]))
// 观察左右天际线
for i, i2 := range grid {
max := 0
for _, i3 := range i2 {
if max < i3 {
max = i3
}
}
LAndR[i] = max
}
// 观察前后天际线
for i := 0; i < len(grid[0]); i++ {
max := 0
for j := 0; j < len(grid); j++ {
if grid[j][i] > max {
max = grid[j][i]
}
}
FAndA[i] = max
}
// 建筑物高度可以增加的最大总和
for i, ints := range grid {
for j, i1 := range ints {
if LAndR[i] > FAndA[j] {
res += FAndA[j] - i1
} else {
res += LAndR[i] - i1
}
}
}
return res
}
感觉我又可以贪了: