左边的投影面积为每一行最大值之和,前面的投影面积为每一列最大值之和,底部投影为所有不为0元素的个数。因此可在一次遍历中将这些数据都统计出来。
class Solution {
public:
int projectionArea(vector<vector<int>>& grid) {
int r = 0, l = 0, d = 0;
int n = grid.size();
for(int i = 0; i < n; i++)
{
int t1 = 0, t2 = 0;
for(int j = 0; j < n; j++)
{
t1 = max(t1, grid[i][j]);
t2 = max(t2, grid[j][i]);
if(grid[i][j]) d++;
}
l += t1;
r += t2;
}
return r+l+d;
}
};