题目描述:
在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。
最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。
建筑物高度可以增加的最大总和是多少?
思路:
将二维数组的行最大值和列最大值存入两个新数组,for循环遍历数组行最大值和列最大值Math.min()-每一个的值
代码:
/**
* @param {number[][]} grid
* @return {number}
*/
var maxIncreaseKeepingSkyline = function(grid) {
var myGrid=grid;
var arrayRow=[];
var arrayCol=[];
var count=0;
for (var i=0;i<myGrid.length;i++) {
arrayRow[i]=Math.max.apply(null,myGrid[i])
arrayCol[i]=myGrid[0][i]
for(var j=0;j<myGrid[0].length-1;j++)
{
if(arrayCol[i]<=myGrid[j+1][i])
{
arrayCol[i]=myGrid[j+1][i]
}
}
}
for ( i=0;i<myGrid.length;i++){
for( j=0;j<myGrid[0].length;j++){
let num = Math.min(arrayRow[i], arrayCol[j]) - myGrid[i][j]
count += num
}
}
return count;
};
总结:学到了数组Math.min()和Math.max()以及apply原型
emmmmmmmm,还有小半天,加油呗!!!!!!