左邊的投影面積爲每一行最大值之和,前面的投影面積爲每一列最大值之和,底部投影爲所有不爲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;
}
};