LeetCode - 807. 保持城市天际线 - Java

x33g5p2x  于2021-12-13 转载在 Java  
字(0.7k)|赞(0)|评价(0)|浏览(448)

题目要求

 

分析

解题

先获得 这个街区组成的城市 的 行数

将这个城市 看成 一个 n*n 正方体,题目的例子的图形也是这么看的。而且还是二维数组。我们要做的是 创建 2个数组,分别是 rowMax 和 colMax, 意思就是 rowMax 记录每一行的最高的那栋楼的层数, colMax记录每一行列的最高的那栋楼的层数。

然后开始遍历 这个 二维数组,获取 我们想要存入 这两个special的数组里

开始加盖房子了

最后 附上程序

  1. class Solution {
  2. public int maxIncreaseKeepingSkyline(int[][] grid) {
  3. int n = grid.length;
  4. int[] rowMax = new int[n];// 用这种方式创建的数组,所有元素默认为 0
  5. int[] colMax = new int[n];// 用这种方式创建的数组,所有元素默认为 0
  6. for(int i = 0;i < n;i++){
  7. for(int j = 0;j < n;j++){
  8. // 将这一行数据,进行比较,最终的结果就是 这一行的最大值
  9. // 将每一行的最大值,存入我们 rowMax 数组
  10. rowMax[i] = Math.max(rowMax[i],grid[i][j]);
  11. // 将每一列的数据,与 colMax 当中 元素进行比较,将最大值存入 colMax 当中
  12. colMax[j] = Math.max(colMax[j],grid[i][j]);
  13. }
  14. }
  15. // 题目 要求是 统计,所以每个都是遍历
  16. int count =0;// 用来记录 总加盖层数
  17. for(int i = 0;i < n;i++){
  18. for(int j = 0;j < n;j++){
  19. count += Math.min(colMax[j],rowMax[i]) - grid[i][j];
  20. }
  21. }
  22. return count;
  23. }
  24. }

相关文章