[Leedcode][JAVA][第892题][图形题]
【问题描述】
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。请你返回最终形体的表面积。示例 1:输入:[[2]]
输出:10
示例 2:输入:[[1,2],[3,4]]
输出:34
示例 3:输入:[[1,0],[0,2]]
输出:16
示例 4:输入:[[1,1,1],[1,0,1],[1,1,1]]
输出:32
示例 5:输入:[[2,2,2],[2,1,2],[2,2,2]]
输出:46提示:1 <= N <= 50
0 <= grid[i][j] <= 50
【解答思路】
1. 时间复杂度:O(N^2)
一个球六个面
当垂直时,重叠(垂直个数减1)
当水平时(行列),重叠(取矮的个数)
grid[i][j]表示在坐标(i, j)上有grid[i][j]个正方体。
例子:[[1, 2], [3, 4]],
grid[0][0] = 1,表示坐标(0, 0)上有1个正方体。
grid[0][1] = 2,表示坐标(0, 1)上有2个正方体。
grid[1][0] = 3,表示坐标(1, 0)上有3个正方体。
grid[1][1] = 4,表示坐标(1, 1)上有4个正方体。
(中间两者与顺序无关)
public int surfaceArea(int[][] grid) {// 习惯上应该做参数检查,但题目中给出了 N >= 1 ,故可以略去int rows = grid.length;// 题目保证了输入一定是 N * N,但为了使得程序适用性更强,还是单独把 cols 做赋值int cols = grid[0].length;int sum = 0;// 垂直重叠int verticalOverlap = 0;// 行重叠int rowOverlap = 0;// 列重叠int colOverlap = 0;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {sum += grid[i][j];if (grid[i][j] > 1) {verticalOverlap += (grid[i][j] - 1);}if (j > 0) {rowOverlap += Math.min(grid[i][j - 1], grid[i][j]);}if (i > 0) {colOverlap += Math.min(grid[i - 1][j], grid[i][j]);}}}return sum * 6 - (verticalOverlap + rowOverlap + colOverlap) * 2;}//代码链接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes/solution/hua-tu-ji-suan-san-ge-zhong-die-bu-fen-by-liweiwei/
【总结】
- 类似题目没有必要刷 题目比较难懂
- 数据分析(pandas)和数据可视化(matplotlib)的工作使用 python
- 多查google,多看官方文档
= 官方文档一般都会给出api的使用方法
from functools import reduce
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3Ddef draw(grid):n = len(grid)z_max = np.max(grid)# 设置长宽高x, y, z = np.indices((n, n, z_max))cubes = []for i in range(n):for j in range(n):# 这是每个柱体cubes.append((x == i) & (y == j) & (z < grid[i][j]))# 创建voxels,包含所有柱体voxels = reduce(lambda x, y: x | y, cubes)# 设置颜色colors = np.empty(voxels.shape, dtype=object)for cube in cubes:colors[cube] = 'red'# 画图!fig = plt.figure()ax = fig.gca(projection='3d')ax.voxels(voxels, facecolors=colors, edgecolor='k')plt.show()# 画一下示例2的3D图
draw([[1, 2], [3, 4]])
//代码来源https://mp.weixin.qq.com/s/IZCw6GtdFLUcixp3EiP5yg
[Leedcode][JAVA][第892题][图形题]相关推荐
- [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]
[问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...
- [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
[问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- [Leedcode][JAVA][第470题][Ran7()实现Rand10()]
[问题描述][Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 ...
- [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]
[问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...
- Java基础编程练习50题(转载)
JAVA基础编程练习50题 本文对50道经典的java程序题进行详细解说,对于初学者可以跳过一些逻辑性太强的题目,比如第一题用到了方法的递归,初学者可能不理解,最好先看那些有if.for.while可 ...
- 牛客网 Java 工程师能力评估 20 题 - 详解
牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...
- JAVA习题大全之java期末考试复习预测题一
JAVA习题大全 目录 JAVA习题大全 java期末考试复习预测题A java期末考试复习预测题B java期末考试复习预测题C java期末考试复习预测题D java期末考试复习预测题E java ...
- java二级考试上机_全国java二级考试上机操作题解题指导.doc
全国java二级考试上机操作题解题指导.doc 还剩 7页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: By [凌风阁] Jane 2013 年秋 J ...
- Java常见的面试算法题:实现两个线程交替打印1到100的数
Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...
最新文章
- 办公word,ppt,excel问题
- R构建KNN多分类模型
- Mybatis的delete方法
- java虚成员函数_Java常见知识点汇总(④)——虚函数、抽象函数、抽象类、接口...
- 编写一个简单的assert宏
- Programming WCF Services翻译笔记(四)
- [剑指offer]面试题45:圆圈中最后剩下的数字
- 2018移动端页面适配-自适应最新方案直接写px--------通过gulp工作流搭建一体化的移动端开发环境
- ❤️六W字《计算机基础知识》(四)(建议收藏)❤️
- java线程同步re_Java线程:线程的同步
- JS:关于JS字面量及其容易忽略的12个小问题
- 基于JavaWeb的网上鞋店商城的设计实现
- 干货|手把手教你写单片机的结构体
- 2512 4.7K 5%贴片电阻识别方法
- SwitchyOmega_Chromium插件的下载安装以及使用
- 如何做好新媒体软文营销推广
- reversed python_python字典reversed
- selenium3 设置浏览器安装的位置
- 《JAVA语言程序设计》期末考试试题及答案
- Lesson 3 Please send me a card 请给我寄一张明信片
热门文章
- [转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法
- 源码搭建lamp环境
- C# 淘宝商品微信返利助手开发-(三)返利助手开发(1)API介绍
- android app逆向分析,如何开始对Android应用的逆向分析?
- mysql数据库root密码在哪个文件中_mysql - 本地数据库忘记了root用户的密码
- PostgreSQL创建数据库报错
- vue开发小程序Demo
- php 顺序结构,顺序存储结构php实现
- 从底层重学 Java 之 Character 字符型 Gitchat连接
- winsw将命令部署为服务(比如springboot)