当前位置: 首页 > news >正文

【LeetCode每日一题】——807.保持城市天际线

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 矩阵

二【题目难度】

  • 中等

三【题目编号】

  • 1572.矩阵对角线元素的和

四【题目描述】

  • 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑。给你一个下标从 0 开始的 n x n 整数矩阵 grid ,其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。
  • 城市的 天际线 是从远处观察城市时,所有建筑物形成的外部轮廓。从东、南、西、北四个主要方向观测到的 天际线 可能不同。
  • 我们被允许为 任意数量的建筑物 的高度增加 任意增量(不同建筑物的增量可能不同) 。 高度为 0 的建筑物的高度也可以增加。然而,增加的建筑物高度 不能影响 从任何主要方向观察城市得到的 天际线 。
  • 在 不改变 从任何主要方向观测到的城市 天际线 的前提下,返回建筑物可以增加的 最大高度增量总和 。

五【题目示例】

  • 示例 1:

    • 在这里插入图片描述
    • 输入:grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
    • 输出:35
    • 解释:建筑物的高度如上图中心所示。用红色绘制从不同方向观看得到的天际线。在不影响天际线的情况下,增加建筑物的高度:gridNew = [ [8, 4, 8, 7],
                                           [7, 4, 7, 7],
                                           [9, 4, 8, 7],
                                           [3, 3, 3, 3] ]
  • 示例 2:

    • 输入:grid = [[0,0,0],[0,0,0],[0,0,0]]
    • 输出:0
    • 解释:增加任何建筑物的高度都会导致天际线的变化。

六【题目提示】

  • n = = g r i d . l e n g t h n == grid.length n==grid.length
  • n = = g r i d [ r ] . l e n g t h n == grid[r].length n==grid[r].length
  • 2 < = n < = 50 2 <= n <= 50 2<=n<=50
  • 0 < = g r i d [ r ] [ c ] < = 100 0 <= grid[r][c] <= 100 0<=grid[r][c]<=100

七【解题思路】

  • 这道题主要是要理解题意,这道题的意思是找出每一行和每一列的最大值,然后看每一个元素增加多少高度不会超过当前这个元素所处行和列最大值中的最小值,这样就不会破坏每个方向观测到的“天际线”
  • 所以我们就遍历整个二维数组,找到每一行和每一列的最大值
  • 然后计算当前元素增加多少高度不会超过当前这个元素所处行和列最大值中的最小值
  • 对二维矩阵中的每个元素都进行上面的操作,然后求和
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2) n n n为传入的正方形数组的长度
  • 空间复杂度: O ( n ) O(n) O(n) n n n为传入的正方形数组的长度

九【代码实现】

  1. Java语言版
class Solution {public int maxIncreaseKeepingSkyline(int[][] grid) {int n = grid.length;int res = 0;int[] rawMax = new int[n];int[] colMax = new int[n];for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){rawMax[i] = Math.max(rawMax[i],grid[i][j]);colMax[j] = Math.max(colMax[j],grid[i][j]);}}for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){res += Math.min((rawMax[i] - grid[i][j]),(colMax[j] - grid[i][j]));}}return res;}
}
  1. C语言版
int maxIncreaseKeepingSkyline(int** grid, int gridSize, int* gridColSize)
{int n = gridSize;int res = 0;int* rawMax = (int*)calloc(n, sizeof(int));int* colMax = (int*)calloc(n, sizeof(int));for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){rawMax[i] = fmax(rawMax[i], grid[i][j]);colMax[j] = fmax(colMax[j], grid[i][j]);}}for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){res += fmin(rawMax[i] - grid[i][j], colMax[j] - grid[i][j]);}}return res;
}
  1. Python语言版
class Solution:def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:n = len(grid)res = 0rawMax = [0] * ncolMax = [0] * nfor i in range(0, n):for j in range(0, n):rawMax[i] = max(rawMax[i],grid[i][j])colMax[j] = max(colMax[j],grid[i][j])for i in range(0, n):for j in range(0, n):res += min(rawMax[i] - grid[i][j], colMax[j] - grid[i][j])return res
  1. C++语言版
class Solution {
public:int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {int n = grid.size();int res = 0;vector<int> rawMax(n);vector<int> colMax(n);for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){rawMax[i] = fmax(rawMax[i],grid[i][j]);colMax[j] = fmax(colMax[j],grid[i][j]);}}for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){res += fmin(rawMax[i] - grid[i][j],colMax[j] - grid[i][j]);}}return res;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

相关文章:

【LeetCode每日一题】——807.保持城市天际线

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 中等 三【题目编号】 1572.矩阵对角线元素的和 四【题目描述】 给你一…...

JavaScript--Date(日期)对象

介绍和说明 创建一个Date对象并获取当前日期和时间&#xff1a; 使用new Date()语句可以创建一个表示当前日期和时间的Date对象。它将使用客户端设备上的当前日期和时间。例如&#xff1a;const currentDate new Date(); 获取特定日期的年、月、日、小时、分钟、秒&#xff1…...

一文讲清多线程与多线程同步

1 多线程 1.1 线程的概念 十多年前&#xff0c;主流观点主张在可能的情况下优先选择多进程而非多线程&#xff0c;如今&#xff0c;多线程编程已经成为编程领域的事实标准。多线程技术在很大程度上改善了程序的性能和响应能力&#xff0c;使其能够更加高效地利用系统资源&…...

《Java-SE-第二十六章》之线程池

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…...

【数据库】将excel数据导入mysql数据库

环境&#xff1a;Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件&#xff0c;删除表头行并另存为并更改编码方式&#xff08;由于与数据库的编码不同&#xff0c;会导致导入报错&#xff09; 通过命令行登录数据库 winr cmd进入 进入装mysql的目录位…...

无涯教程-Lua - repeat...until 语句函数

与 for 和 while 循环(它们在循环顶部测试循环条件)不同&#xff0c;Lua编程中的 repeat ... until 循环语言在循环的底部检查其条件。 repeat ... until 循环与while循环相似&#xff0c;不同之处在于&#xff0c;保证do ... while循环至少执行一次。 repeat...until loop - …...

环形链表 LeetCode热题100

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 思路 快慢指针。开始快指针在慢指针前面&#xff0c;当快指针等于慢指针时说明有环&#xff0c;如果快指针指向null时说明无环。 代码 /*** Definition for singly-linked list.* struct ListNode {* …...

使用python将每组两行数据合并一行

1、使用场景 将有规律的每组(一组2行)的单数行和双数行合并为一行&#xff0c;以空格分割。 比如使用pssh批量得出的结果&#xff0c;想让ip行和结果行合并为一行&#xff08;前提如上所述&#xff09; [rootk8s-master1 tmp]# pssh -h iplist -i hostname [1] 18:12:42 [SU…...

14-1_Qt 5.9 C++开发指南_网络编程及主机信息查询_HostInfo

Qt 网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类&#xff0c;如用于 TCP 通信的QTcpSocket 和 QTcpServer&#xff0c;用于 UDP 通信的 QUdpSocket&#xff0c;还有用于实现 HTTP、FTP 等普通网络协议的高级类如 QNetworkRequest&#xff0c;QNetworkReply 和Q…...

【iOS】通知原理

我们可以通过看通知的实现机制来了解通知中心是怎么实现对观察者的引用的。由于苹果对Foundation源码是不开源的&#xff0c;我们具体就参考一下GNUStep的源码实现。GNUStep的源码地址为&#xff1a;GNUStep源码GitHub下载地址, 具体源码可以进行查看。 通知的主要流程 通知全…...

创建邮件服务器(小微企业)

这里写自定义目录标题 目的硬件选型&#xff1a;软件选型&#xff1a;coremail &#xff08;商业版本&#xff09;postfixumail免费开源版本新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适…...

android app控制ros机器人四(调整界面布局)

半吊子改安卓&#xff0c;记录页面布局调整&#xff1a; 在ros-mobile基础上顶端增加一行&#xff0c;用于显示app名称和logo图像&#xff1b;修改标签页。 添加文字简单&#xff0c;但是替换图标长知识了&#xff0c;开始只是简单的把mipmap各个文件夹下的图片进行替换&…...

稍微深度踩坑haystack + whoosh + jieba

说到django的全文检索&#xff0c;网上基本推荐的都是 haystack whoosh jieba 的方案。 由于我的需求对搜索时间敏感度较低&#xff0c;但是要求不能有数据的错漏。 但是没有调试的情况下&#xff0c;搜索质量真的很差&#xff0c;搞得我都想直接用Like搜索数据库算了。 但是…...

微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)

问题描述 今天第一次接触vant组件库。 ant官网地址适用于Vue3 支持Vue2、Vue3、微信小程序等 我在使用van-tabs组件时遇到了一个问题&#xff0c;如下图所示&#xff1a; 从图片上可以看到有个灰色的横向滚动条&#xff0c;一开始领导给我说这个问题&#xff0c;我反反复复都…...

激光切割机所发出的辐射是否会对人体产生危害呢

激光切割设备所发出的激光作为一种特殊的能量光源&#xff0c;在一定程度上是存在辐射的。由于光纤激光器的功率通常大于半导体激光器&#xff0c;因此其辐射安全性也受到我们的关注。那么这种辐射的危害究竟有多大呢? 第一级&#xff1a;在正常操作下&#xff0c;不会发出对人…...

Redis 高可用:主从复制、哨兵模式、集群模式

文章目录 一、redis高可用性概述二、主从复制2.1 主从复制2.2 数据同步的方式2.2.1 全量数据同步2.2.2 增量数据同步 2.3 实现原理2.3.1 服务器 RUN ID2.3.2 复制偏移量 offset2.3.3 环形缓冲区 三、哨兵模式3.1 原理3.2 配置3.3 流程3.4 使用3.5 缺点 四、cluster集群4.1 原理…...

在GitHub上管理和协作的完全指南

介绍 GitHub 是一个强大的版本控制和协作平台&#xff0c;它不仅可以帮助你管理和跟踪项目的变化&#xff0c;还可以与他人进行协作。本文将详细介绍如何使用 GitHub 的各种功能来管理和协作项目。 目录 注册GitHub账号创建和管理仓库 创建仓库添加和管理文件分支管理合并请…...

git管理工具学习(图解使用git工作流程)

目录 GIT 简介一个最简单的GIT操作流程git的工作流程&命令 GIT 简介 git是什么&#xff0c;在维基百科上是这么介绍的&#xff1a;git是一个分布式的版本控制软件 分布式是相对于集中式而言的&#xff0c;分布式即每一个git库都是一个完整的库。 每个库的地位都是平等的&am…...

单例模式(Singleton)

单例模式保证一个类仅有一个实例&#xff0c;并提供一个全局访问点来访问它&#xff0c;这个类称为单例类。可见&#xff0c;在实现单例模式时&#xff0c;除了保证一个类只能创建一个实例外&#xff0c;还需提供一个全局访问点。 Singleton is a creational design pattern t…...

2023-08-02 LeetCode每日一题(翻转卡片游戏)

2023-08-02每日一题 一、题目编号 822. 翻转卡片游戏二、题目链接 点击跳转到题目位置 三、题目描述 在桌子上有 N 张卡片&#xff0c;每张卡片的正面和背面都写着一个正数&#xff08;正面与背面上的数有可能不一样&#xff09;。 我们可以先翻转任意张卡片&#xff0c;…...

智慧树自动刷课插件:三步实现网课自动化学习的完整指南

智慧树自动刷课插件&#xff1a;三步实现网课自动化学习的完整指南 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台冗长的网课视频而烦恼吗&#xff1…...

【RT-DETR涨点改进】TGRS 2026 | 全网独家创新、特征融合改进篇| 引入STSAM协同时空注意力融合模块,发论文热点创新,注意力能够互相引导强化边界和结构细节,增强目标检测高效涨点

一、本文介绍 🔥本文给大家介绍使用 STSAM协同时空注意力融合模块 改进RT-DETR网络模型,STSAM 是 空间域特征增强模块,通过全局跨时相注意力和局部坐标注意力的并行处理,能有效聚焦真实变化目标,强化边界和结构细节,同时兼顾训练稳定性,为后续浅层特征融合提供高质量特…...

OpenClaw技能组合实战:Phi-3-vision-128k实现完整会议纪要自动化

OpenClaw技能组合实战&#xff1a;Phi-3-vision-128k实现完整会议纪要自动化 1. 为什么需要会议纪要自动化 作为经常参加跨时区会议的开发者&#xff0c;我长期被会议纪要整理工作困扰。传统流程需要手动录音转文字、整理白板照片、提取行动项&#xff0c;最后还要同步到日历…...

FLUX.1-dev创作实战:从输入文案到生成图片,完整流程一次跑通

FLUX.1-dev创作实战&#xff1a;从输入文案到生成图片&#xff0c;完整流程一次跑通 1. 认识FLUX.1-dev&#xff1a;新一代AI图像生成引擎 FLUX.1-dev是Black Forest Labs推出的开源AI图像生成模型&#xff0c;以其出色的真实感和高效生成能力在开发者社区中广受好评。与常见…...

2026届必备的五大AI辅助写作方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能技术参与进来之后&#xff0c;学术论文写作在效率方面有了明显的大幅提升&#xf…...

等保.三级要求下Redis 安全测评应该怎么做?

1. 引入 在现代 AI 工程中&#xff0c;Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的&#xff0c;官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为&#xff0c;最好的办法…...

SEO_10个提升网站排名的实用SEO技巧分享(370 )

SEO:10个提升网站排名的实用SEO技巧分享 在当今的互联网时代&#xff0c;一个网站的成功离不开搜索引擎优化&#xff08;SEO&#xff09;。SEO不仅仅是一套技术&#xff0c;更是一种思维方式。本文将详细分享十个实用的SEO技巧&#xff0c;帮助你提升网站的排名&#xff0c;吸…...

基于S7-200 PLC和MCGS组态的灌装贴标生产线系统:带解释的梯形图程序、接线图原理图图...

基于S7-200 PLC和MCGS组态的灌装贴标生产线系统 带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面车间里那台老灌装线最近被我折腾得焕然一新&#xff0c;用S7-200 PLC搭配MCGS组态搞了个自动化改造。这活儿干下来发现几个关键点特别有意思&#xff0c;尤…...

Qwen3-14B部署后效果追踪:30天使用数据与关键指标增长分析

Qwen3-14B部署后效果追踪&#xff1a;30天使用数据与关键指标增长分析 1. 部署效果概览 在RTX 4090D 24GB显存环境下部署Qwen3-14B镜像后&#xff0c;我们对系统进行了为期30天的持续监测。数据显示&#xff0c;这套优化配置展现出令人印象深刻的稳定性和性能表现&#xff1a…...

告别手动调参!用大津法(OTSU)实现8路灰度传感器的自适应巡线(附完整C代码)

告别手动调参&#xff01;用大津法实现8路灰度传感器的智能巡线方案 当你在电赛现场调试机器人巡线时&#xff0c;是否经历过这样的场景&#xff1a;刚在A场地调好的阈值参数&#xff0c;换到B场地就完全失灵&#xff1b;上午还能精准巡线的小车&#xff0c;下午因为光照变化就…...