今天的题目,AC!

题目描述

  题目链接在此,883. 三维形体投影面积,题目截图如下:

image-20220426173620681

  这道题通俗来说就是从正视图、侧视图、俯视图来数一数一共有多少个正方体。需要注意的是,俯视图中,如果有个方格没有正方体,那是不算的。比如题目中给的例子,正视图有7个,侧视图有6个,俯视图有4个,所以一共17个。

题目分析

  通过上面的题目描述,我们大概知道我们需要干什么了,就是数二维数组中,非零元素的个数,作为我们俯视图的结果。然后每一列最大值之和作为我们正视图的结果。最后每一行最大值之和作为我们侧视图的结果。

代码实现

  考虑到这个二维数据行和列是相同的,所以我们放在一个循环搞定,代码如下:

class Solution {
public:
    int projectionArea(vector<vector<int>>& grid) {
        int rows = grid.size(),cols= grid.size();
        int count = 0,side = 0,front = 0;
        for(int i = 0;i<rows;i++){
            int tmp_side=0,tmp_front = 0;
            for(int j = 0;j<cols;j++){
                if(grid[i][j]!=0){
                    count++;
                }

                if(grid[i][j]>tmp_side){
                    // 从行来看
                    tmp_side = grid[i][j];
                }

                if(grid[j][i]>tmp_front){
                    // 从列来看
                    tmp_front = grid[j][i];
                }
            }
            side+=tmp_side;
            front+=tmp_front;
        }
        return side+front+count;
    }
};

结语

  积少成多,积水成渊!水滴石穿,非一日之功!

Q.E.D.


 研究僧一名,CV领域,研究方向为对抗攻击,欢迎各位前来交流