leetcode-887-三维形体投影面积
题目描述:
在 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 <= 500 <= grid[i][j] <= 50
要完成的函数:
int projectionArea(vector<vector<int>>& grid)
说明:
1、这道题给定一个二维的vector,记为grid,grid[i][j]表示在网格坐标为(i,j)的点上有grid[i][j]个立方体,每个立方体为1*1*1的体积。
要求从上方看下来,从前面看过去,从侧面看过去,从这三个方向看过去得到的投影面积之和是多少。
2、这是一道初中的数学题目吧?只不过我们现在用程序来自动化地完成运算,需要抽象出统一的规则。
①从上面看下来,这个好办,grid这个二维vector中有多少个不为0的元素,从上方看下来的投影面积就是多少。
比如grid为[[1,2],[3,4]],图形如题目描述中所示,有四个不为0的元素,所以上方看下来的投影面积是4。
②从前面看过去,这个也不难,比如[[1,2],[3,4]],我们说第一行第一列的元素是1,第一行第二列的元素是2,那么第一行我们最终能看到的投影面积就是2了,也就是取个最大值。
第二行第一列的元素是3,第二行第二列的元素是4,那么第二行我们最终能看到的投影面积也就是4了,也是取个最大值。
所以从前面看过去的投影面积,就是每一行的元素最大值的和。
③同理,从侧面看过去,这时候我们要取每一列的最大值了,最后再把每一列的最大值相加,就是我们要的侧面投影面积。
所以,代码如下:(附详解)
int projectionArea(vector<vector<int>>& grid)
{
int hang=grid.size(),lie=grid[0].size(),shang=0,max1,qian=0,ce=0;
for(int i=0;i<hang;i++)//按行读取
{
max1=0;
for(int j=0;j<lie;j++)
{
if(grid[i][j])//如果这个元素不为0
shang++;//那么shang加1
max1=max(max1,grid[i][j]);//取每一行的最大值
}
qian+=max1;//把每一行的最大值相加,存储在qian里面
}
for(int j=0;j<lie;j++)//按列读取
{
max1=0;
for(int i=0;i<hang;i++)
{
max1=max(max1,grid[i][j]);//取每一列的最大值
}
ce+=max1;//把每一列的最大值相加,存储在ce里面
}
return shang+qian+ce;//最终返回三个投影面积相加的和
}
上述代码实测8ms,因为总提交次数不足,所以还没有击败的百分比。
leetcode-887-三维形体投影面积的更多相关文章
- [Swift]LeetCode883. 三维形体投影面积 | Projection Area of 3D Shapes
On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...
- Leetcode883.Projection Area of 3D Shapes三维形体投影面积
在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 现在,我们查 ...
- leetcode 892. 三维形体的表面积
题目描述: 在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 返回最终形体的表面积. ...
- [LeetCode] 883. Projection Area of 3D Shapes 三维物体的投影面积
On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...
- leetcode签到 892. 三维形体的表面积
题目 三维形体的表面积 在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上. 请你返回最 ...
- [Swift]LeetCode892. 三维形体的表面积 | Surface Area of 3D Shapes
On a N * N grid, we place some 1 * 1 * 1 cubes. Each value v = grid[i][j] represents a tower of v cu ...
- [LeetCode] 887. Super Egg Drop 超级鸡蛋掉落
You are given K eggs, and you have access to a building with N floors from 1 to N. Each egg is iden ...
- [LeetCode] 223. Rectangle Area 矩形面积
Find the total area covered by two rectilinearrectangles in a 2D plane. Each rectangle is defined by ...
- Leetcode892.Surface Area of 3D Shapes三维形体的表面积
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 返回结果形体的总表面积. 示例 1: ...
随机推荐
- Linux TCP拥塞控制算法原理解析
这里只是简单梳理TCP各版本的控制原理,对于基本的变量定义,可以参考以下链接: TCP基本拥塞控制http://blog.csdn.net/sicofield/article/details/9708 ...
- Debian Mount nfs 出错的解决
系统未安装 nfs 客户端 #aptitude install nfs-common 解决!
- Android使用ListView使用方法
Android使用ListView应该注意的地方 在ListView中设置Selector为null会报空指针? mListView.setSelector(null);//空指针 试试下面这种: ...
- Forms in Angular 2
Input handling is an important part of application development. The ng-model directive provided in A ...
- 深入浅出谈数据挖掘zz
编者的话:本文对数据挖掘概念的产生,数据挖掘与常规数据分析的主要区别,所能解决的几大类问题和所应用的领域都有着非常清晰的论述.作者在此篇文章中认为数据挖掘最重要的要素是分析人员的相关业务知识和思维模式 ...
- foo是什么?
在英文程序员社区里,foo bar baz这些词是常用于作为占位符而使用的.要查wiki的话,这项更合适:http://en.wikipedia.org/wiki/Metasyntactic_vari ...
- windows7 不能更新,提示:"WindowsUpdate_80240016" "WindowsUpdate_dt000",如何解决?
计算机(右键) ---- 管理 -------- 服务和应用程序 -----服务(找到名称为windows update的服务,并且在windwos update服务右键 选择重新启动 ) 再次安装更 ...
- ZSTU4274 约素 2017-03-22 17:11 66人阅读 评论(0) 收藏
4274: 约素 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1807 Solved: 467 Description 判断一个正整数n的约数个数 ...
- Modelsim10.2c使用教程(一个完整工程的仿真)
之前玩过Altera的板子,不不, 现在应该叫intel PSG.在QuartusII13.0上老喜欢用modelsim_ae做仿真,小工程用起来也方便,但是我做IIC配置摄像头的时序仿真时,就显得有 ...
- 结巴net 分词 配置文件路径,在网站中的出现问题的解决
用结巴分词net版,部署到网站上的时候,配置文件的地址为相对路径的时候会出现问题,绝对路径就没有问题. 原因是结巴源码中,取路径是取的应用程序的目录.如果是winform程序当然没有问题,在网站就不行 ...