三维形体投影面积

news2024/11/18 15:40:06

🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->三维形体投影面积

问题描述

在  n x n  的网格  grid  中,我们放置了一些与 x,y,z 三轴对齐的  1 x 1 x 1  立方体。

每个值  v = grid[i][j]  表示  v  个正方体叠放在单元格  (i, j)  上。

现在,我们查看这些立方体在  xy 、yz  和  zx  平面上的投影

投影  就像影子,将  三维  形体映射到一个  二维  平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。

返回  所有三个投影的总面积 。

示例 1:

输入: [[1,2],[3,4]]
输出: 17
解释: 这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。

示例  2:

输入: grid = [[2]]
输出: 5

示例 3:

输入: [[1,0],[0,2]]
输出: 8

提示:

  • n == grid.length == grid[i].length
  • 1 <= n <= 50
  • 0 <= grid[i][j] <= 50

思路分析

首先我们应该要先理解一下题目意思,题目会给我们一个二维数组 gridgrid[i]表示第i行排列的每个箱子高度,如示例一:[[1,2],[3,4]]

第一行就是数组 grid[0] = [1,2] ==> 表示两个箱子高度分别是 1、2;

第二行就是数组 grid[1] = [3,4] ==> 表示两个箱子高度分别是 3、4;

我们需要计算这堆箱子分别从顶部、前面和侧面看,我们会看到投射面积之和。

知道了题目的要求和给出参数的含义之后,我们便可以开始编写代码解答题目了,我们可以分为三步,分别计算俯视图、侧视图和正视图面积:

  • 1、计算俯视图面积

俯视图面积是最容易计算的一个,我们只需要遍历数组,找出有箱子的行列数即可(即 grid[i][j] > 0),具体代码如下:

grid.forEach((item) => (res += item.filter((i) => i != 0).length));
  • 2、计算侧视图面积

侧视图其实就是从左边或右边看箱子,这时候我们可以看到的面积取决于每一行中的最高的箱子,所以我们只需要遍历 grid,找出每一行中最高的那个箱子高度,将每一行最高的箱子加起来即是侧视图面积。具体代码如下:

grid.forEach((item) => (res += Math.max(...item)));
  • 3、计算正视图面积

正视图其实就是从前边看箱子,这时候我们可以看到的面积取决于每一列中的最高的箱子,所以我们只需要遍历 grid,找出每一列中最高的那个箱子高度,将每一列中最高的箱子加起来即是正视图面积。具体代码如下:

const map = {};
grid.forEach((item) => {
  item.forEach((cell, cIndex) => {
    map[cIndex] = Math.max(map[cIndex] || 0, cell);
  });
});
for (const key in map) res += map[key];

AC 代码

完整 AC 代码如下:

/**
 * @param {number[][]} grid
 * @return {number}
 */
var projectionArea = function (grid) {
  let res = 0;
  //俯
  grid.forEach((item) => (res += item.filter((i) => i != 0).length));
  //侧
  grid.forEach((item) => (res += Math.max(...item)));
  //正
  const map = {};
  grid.forEach((item) => {
    item.forEach((cell, cIndex) => {
      map[cIndex] = Math.max(map[cIndex] || 0, cell);
    });
  });
  for (const key in map) res += map[key];
  return res;
};

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

petalinux 生成SDK报错排除

AAA: 在项目文件下新建Qt5文件夹文件夹内新建文件并且设置对应参数 文件夹路径&#xff1a; project-spec/meta-user/recipes-qt/qt5 新建文件 vim ./qt5/qt3d_%.bbappend vim ./qt5/qtquickcontrols2_%.bbappend vim ./qt5/qtserialbus_%.bbappend 文件内容 qt3d_%.bbap…

完美解决Non-terminating decimal expansion; no exact representable decimal result.异常

我们在使用BigDecimal进行精确计算时常常会出现Non-terminating decimal expansion; no exact representable decimal result.异常。 出现这个异常的原因在于 BigDecimal 是不可变的、任意精度的有符号十进制数&#xff0c;所以可以做精确计算。但在除法中&#xff0c;准确的商…

ernie-layout笔记

1: 识别文档中文字以及准确的对这些文字排序是必须的一步骤 采用 OCR技术识别文字以及对应的图像坐标信息&#xff0c;光栅扫描以生成输入序列按照从左到右&#xff0c;从上到下的顺序&#xff1b;但是以上方法针对复杂的结构就会出现问题&#xff1b;因此文章使用了Document-P…

Spring源码核心剖析 | 京东云技术团队

前言 SpringAOP作为Spring最核心的能力之一&#xff0c;其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能&#xff0c;而是一种思想&#xff0c;一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中&#xff0c;使其作为bean的一种&#xff…

算法程序设计 之 循环赛日程表(2/8)

一、实验目的&#xff1a; 理解并掌握分治算法的基本思想和设计步骤。 二、实验内容 设有n个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表&#xff1a; &#xff08;1&#xff09;每个选手必须与其他n-1个选手各赛一次&#xff1b; &#xff08;2&#xff0…

HOOPS Web SDK 2023 Crack

在 HOOPS WEB 平台上释放 3D 的力量 HOOPS Web 平台加速 Web 应用程序开发&#xff0c;提供先进的 3D Web 可视化、准确快速的 CAD 数据访问和 3D 数据发布软件开发工具包 &#xff08;SDK&#xff09;。 构建 3D WEB 应用程序 借助 HOOPS Web 平台&#xff0c;快速构建适用于…

值得收藏的 10个 Android 手机恢复丢失文件的工具榜单

尽管我们尽可能避免这种情况&#xff0c;但有时我们还是会不小心删除 Android 设备上的重要文件。无论是照片、视频、文档还是任何其他形式的数据&#xff0c;数据丢失都会带来巨大的痛苦。不幸的是&#xff0c;Android 设备没有内置恢复工具。但是&#xff0c;有一些第三方恢复…

里程碑式突破!关键的薛定谔猫编码能带来更好的量子比特

​ 薛定谔的猫编码插图&#xff08;图片来源&#xff1a;网络&#xff09; 来自瑞士洛桑联邦理工学院&#xff08;EPFL&#xff09;的科学家提出了一种突破性的量子计算容错方案&#xff0c;称为“关键的薛定谔猫编码”。这种新颖的系统在混合状态下运行&#xff0c;具有强大的…

容灾与备份区别、灾备技术、容灾体系规划

1.容灾备份的区别 容灾 &#xff08;Disaster Tolerance&#xff09;&#xff1a;就是在上述的灾难发生时&#xff0c;在保证生产系统的数据尽量少丢失的情况下&#xff0c;保持生存系统的业务不间断地运行。 容错 &#xff08;Fault Tolerance&#xff09;&#xff1a;指在计…

激光显示技术路线之争:超级全色激光技术ALPD5.0更先进

5月以来,智能投影市场爆发的激光显示技术路线之争愈演愈烈,各厂家带领自有的技术路线你方唱罢我登场,犹如一出愈演愈烈的大戏,吸引了业内外各界的目光。 从极米在5月10日2023春季新品发布会上率先向三色激光技术发难,再到坚果投影首席产品官在朋友圈发文炮轰极米的技术路线,随…

MarkDown常用功能

快捷键 撤销&#xff1a;Ctrl/Command Z 重做&#xff1a;Ctrl/Command Y 加粗&#xff1a;Ctrl/Command B 斜体&#xff1a;Ctrl/Command I 标题&#xff1a;Ctrl/Command Shift H 无序列表&#xff1a;Ctrl/Command Shift U 有序列表&#xff1a;Ctrl/Command Shif…

【二叉树part01】| 二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代遍历

目录 ✿二叉树的递归遍历❀ ☞LeetCode144.前序遍历 ☞LeetCode145.二叉树的后序遍历 ☞LeetCode94.二叉树的中序遍历 ✿二叉树的迭代遍历❀ ☞LeetCode144.前序遍历 ☞LeetCode145.二叉树的后序遍历 ☞LeetCode94.二叉树的中序遍历 ✿二叉树的统一迭代遍历❀ ☞Lee…

CTFshow-pwn入门-前置基础pwn32-pwn34

FORTIFY_SOURCE FORTIFY_SOURCE(源码增强)&#xff0c;这个其实有点类似与Windows中用新版Visual Studio进行开发的时候&#xff0c;当你用一些危险函数比如strcpy、sprintf、strcat&#xff0c;编译器会提示你用xx_s加强版函数。 FORTIFY_SOURCE本质上一种检查和替换机制&am…

算法程序设计 之 矩阵连乘(3/8)

一、实验目的&#xff1a; 理解动态规划算法的基本思想和设计步骤&#xff1b; 掌握动态规划算法的典型应用范例——矩阵连乘。 二、实验内容 矩阵连乘 给定n个可乘的数字矩阵A1,…,An&#xff0c;以及矩阵的阶p0* p1, p1* p2,…, pn-1* pn,求给定矩阵链的最优计算次序使得所需…

JavaWeb之文件的上传和下载

文章目录 文件的上传基本介绍文件上传的HTTP协议的说明commons-fileupload.jar 常用API介绍说明fileupload类库的使用 文件的下载基本介绍和使用说明中文名乱码问题解决方案 文件的上传和下载&#xff0c;是非常常见的功能。很多的系统中&#xff0c;或者软件中都经常使用文件的…

使用spacy做分词的示例

下载数据&#xff1a; aws s3 cp s3://applied-nlp-book/data/ data --recursive --no-sign-request aws s3 cp s3://applied-nlp-book/models/ag_dataset/ models/ag_dataset --recursive --no-sign-request 上面第一份数据接近1GB&#xff0c;第二份接近3GB&#xff1b; 示…

买了一年CSDN年VIP,用着实在太爽

买一年CSDN的年VIP有多爽及使用攻略&#xff01; 一、前言 这段时间&#xff0c;一旦打开CSDN就不断的弹出618活动&#xff0c;在电脑网上打开&#xff0c;一股白嫖之的气息吹来&#xff0c;让人直接忍不住剁手 最后经过近5天的挣扎&#xff0c;我还是受不了CSDN的蛊惑&#…

【工具分享】批量多目录图片如何转换PDF,一次性转换多级目录批量的PDF的转换,合并,输出另存等问题

在工作中我们经常要对图片进行批量转换PDF&#xff0c;由于文件量比较多&#xff0c;目录比较深&#xff0c;工作量比较大比较耗时费力&#xff0c;今天我们分享的主要解决以下问题&#xff1a; 1、单张图片的转换PDF&#xff1a;一张图临时转一下 2、多张图片转换成PDF&…

(二叉树) 1382. 将二叉搜索树变平衡 ——【Leetcode每日一题】

❓1382. 将二叉搜索树变平衡 难度&#xff1a;中等 给你一棵二叉搜索树&#xff0c;请你返回一棵 平衡后 的二叉搜索树&#xff0c;新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法&#xff0c;请你返回任意一种。 如果一棵二叉搜索树中&#xff0c;每个节点…

whistle 使用介绍

什么是 whistle 来自 whistle 官网&#xff1a;http://wproxy.org/whistle/ 的介绍&#xff1a; whistle(读音[ˈwɪsəl]&#xff0c;拼音[wēisǒu])基于Node实现的跨平台web调试代理工具&#xff0c;类似的工具有Windows平台上的Fiddler&#xff0c;主要用于查看、修改HTTP…