Weekly Contest 96

第一次参加Leetcode周赛


三维形体投影面积

三维形体投影面积
在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。

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

现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影。

投影就像影子,将三维形体映射到一个二维平面上。

在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。

返回所有三个投影的总面积。

示例 1:

输入:[[2]]
输出:5

示例 2:

输入:[[1,2],[3,4]]
输出:17
解释:
这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。
这里写图片描述

示例 3:

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

示例 4:

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

示例 5:

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

提示:

  • 1 <= grid.length = grid[0].length <= 50
  • 0 <= grid[i][j] <= 50

开始没看懂题,然后看大佬们几分钟就写出来了….就仔细看了下,数组里的数代表的是立方体个数,i,j自动代表了位置,所以可以这样写:

  1. 计算相对于地面的立方体投影个数
  2. 计算相对与后面的立方体投影个数
  3. 计算相对于左面的立方体投影个数

1的话可以用一个计数器,遍历二维数组,不为0就自加
2的话可在遍历二维数组的同时,将一维数组中最大的值求出,然后求和
3的话另开一个for循环,先j后i,求最大和2类似
代码如下:

    int projectionArea(vector<vector<int>>& grid) {
            int sum = 0;
        int x = 0;
        for(int i=0;i<grid.size();i++){
            int min = 0;
            for(int j=0;j<grid[i].size();j++){
                if(grid[i][j]!=0){
                    sum++;
                }
                if(grid[i][j]>min){
                    min = grid[i][j];
                }
            }
            x +=min;
        }                         //地面和左面
    int y = 0;
    for(int i=0;i<grid[0].size();i++){
        int min = 0;
        for(int j=0;j<grid.size();j++){
            if(grid[j][i]>min){
                min = grid[j][i];
            }
        }
        y+=min;                        //后面
    }
    return x+y+sum;
}

emmm我的代码看起来好恶心,我再贴一下u神的,算了,贴另外一名大佬的看着真的舒服,最后,u神第一题罚时了哈哈哈

    int projectionArea(vector<vector<int>>& a) {
        int n=a.size(),m=a[0].size(),ans=0;
        vector<int> x(n,0),y(m,0);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++){
                if(a[i][j]>0)ans++;
                x[i]=max(x[i],a[i][j]);
                y[j]=max(y[j],a[i][j]);
            }
        for(int i=0;i<n;i++)ans+=x[i];
        for(int i=0;i<m;i++)ans+=y[i];
        return ans;
    }

猜你喜欢

转载自blog.csdn.net/weixin_41709523/article/details/81429677
今日推荐