题目
我的题解
先算出横着最高的,再算出竖着最高的,然后比较运算,简单粗暴。
class Solution {
public int maxIncreaseKeepingSkyline(int[][] grid) {
int[] maxColumn = new int[grid.length];
int[] maxRow = new int[grid.length];
int ans = 0;
int index = 0;
for (int[] row : grid) {
int max = 0;
for (int i = 0; i < row.length; i++) {
max = Math.max(max, row[i]);
}
maxRow[index] = max;
index++;
}
for (int i = 0; i < grid[0].length; i++) {
int max = 0;
for (int j = 0; j < grid.length; j++) {
max = Math.max(max, grid[j][i]);
}
maxColumn[i] = max;
}
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
ans += (Math.min(maxColumn[j], maxRow[i]) - grid[i][j]);
}
}
return ans;
}
}
其他题解
通过指定存储的索引,在一个循环就能解决找到两个方向最大值的方式,查看解法链接。
总结
- 二维数组的比较处理有时可以在一个循环中解决,学会赋予索引更多的意义将非常有用