2021-12-13 807. 保持城市天际线
2021-12-13 本文已影响0人
16孙一凡通工
用到了二重数组转换成一重数组的思路,其他的就没啥了,调试用了不少的时间。
import (
"fmt"
)
func maxIncreaseKeepingSkyline(grid [][]int) int {
// 每一项保证小于两个最大值
col_max,row_max:=0,0;
var col_max_arr []int;
var ro_max_arr []int;
// 二重循环变成一重循环的模板
// 0,1
// 1,0 2,0
// 3,7,11,15
for i:=0;i<len(grid)*len(grid[0]);i++{
if grid[i/len(grid)][i%len(grid)]>col_max{
col_max=grid[i/len(grid)][i%len(grid)]
}
if grid[i%len(grid[0])][i/len(grid[0])]>row_max{
row_max=grid[i%len(grid[0])][i/len(grid[0])]
}
// 四次插入,三次替换
if (i+1)%len(grid)==0{
col_max_arr=append(col_max_arr,col_max);
if i+1==len(grid)*len(grid[0]){
col_max=0;
}else{
col_max=grid[i/len(grid)+1][0];
}
}
if (i+1)%len(grid[0])==0 {
ro_max_arr=append(ro_max_arr,row_max);
if i+1==len(grid)*len(grid[0]){
row_max=0;
}else{
row_max=grid[0][(i)/len(grid[0])+1];
}
}
}
// fmt.Println(col_max_arr)
// fmt.Println(ro_max_arr)
col_max,row_max=0,0;
// col_tmp,row_tmp:=0,0;
res:=0;
for i:=0;i<len(grid);i++{
for j:=0;j<len(grid[0]);j++{
if grid[i][j]<col_max_arr[i] && grid[i][j]<ro_max_arr[j]{
res+=min(col_max_arr[i],ro_max_arr[j])-grid[i][j];
}
// fmt.Println(res);
}
}
return res;
}
func min(num1 int,num2 int)int{
if num1<num2{
return num1;
}
return num2;
}