zoukankan      html  css  js  c++  java
  • 计算几何-892. 三维形体的表面积

    2020-03-25 15:47:14

    问题描述:

    在 N * N 的网格上,我们放置一些 1 * 1 * 1  的立方体。

    每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。

    请你返回最终形体的表面积。

    示例 1:

    输入:[[2]]
    输出:10

    示例 2:

    输入:[[1,2],[3,4]]
    输出:34

    示例 3:

    输入:[[1,0],[0,2]]
    输出:16

    示例 4:

    输入:[[1,1,1],[1,0,1],[1,1,1]]
    输出:32

    示例 5:

    输入:[[2,2,2],[2,1,2],[2,2,2]]
    输出:46 

    提示:

    1 <= N <= 50
    0 <= grid[i][j] <= 50

    问题求解:

    直接去运算每行每列的最大值,然后计算是不对的,因为可能会存在中间有空洞的情况,导致表面积计算减少。

    正确的计算方式是每个柱体进行单独计算,并且逐行逐列的减去重复的部分。

    时间复杂度:O(n ^ 2)

        public int surfaceArea(int[][] grid) {
            int res = 0;
            int n = grid.length;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (grid[i][j] != 0) res += grid[i][j] * 4 + 2;
                    if (i > 0) res -= Math.min(grid[i - 1][j], grid[i][j]) * 2;
                    if (j > 0) res -= Math.min(grid[i][j - 1], grid[i][j]) * 2;
                }
            }
            return res;
        }
    

      

  • 相关阅读:
    语法树,短语,直接短语,句柄2.0
    语法树,短语,直接短语,句柄
    2.理解文法和语文
    编译原理的学习 No.1
    第一次个人编程作业
    Arduboy基本操作(二)
    Arduboy基本用法(一)
    物理存储管理实训题
    创建和管理用户作业
    PL/SQL语言基础
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12566720.html
Copyright © 2011-2022 走看看