You are given an n x n
grid
where we place some 1 x 1 x 1
cubes that are axis-aligned with the x
, y
, and z
axes.
Each value v = grid[i][j]
represents a tower of v
cubes placed on top of the cell (i, j)
.
We view the projection of these cubes onto the xy
, yz
, and zx
planes.
A projection is like a shadow, that maps our 3-dimensional figure to a 2-dimensional plane. We are viewing the "shadow" when looking at the cubes from the top, the front, and the side.
Return the total area of all three projections.
Example:
Input: grid = [[1,2],[3,4]]
Output: 17
Approach:
C++
#include <bits/stdc++.h>using namespace std;int projectionArea(vector<vector<int>> &grid){// 1: Top view: how many grids have the cubes// 2: Front view: maximum number of cubes in a column// 3: Side view: maximum number of cubes in a rowint top = 0, front = 0, side = 0, size = grid.size();vector<int> maxCubesInCol(size);for (int i = 0; i < size; ++i){int maxCubesInRow = 0;for (int j = 0; j < size; ++j){//cubesint cubes = grid[i][j];//update top valuetop = cubes > 0 ? top + 1 : top;//uodate number of cubes in the rowmaxCubesInRow = cubes > maxCubesInRow ?cubes : maxCubesInRow;//maximum number of cubes in the columsmaxCubesInCol[j] = cubes > maxCubesInCol[j] ?cubes : maxCubesInCol[j];}//update sideside += maxCubesInRow;}front = accumulate(maxCubesInCol.begin(),maxCubesInCol.end(), 0);return front + side + top;}int main(){vector<vector<int>> grid = {{1, 2}, {3, 4}};cout << projectionArea(grid);return 0;}
No comments:
Post a Comment