807.力扣每日一题7/14 Java(执行用时分布击败100%)

  • 博客主页:音符犹如代码
  • 系列专栏:算法练习
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

 

 

目录

解题思路 

解题过程

时间复杂度

空间复杂度

Code


解题思路

  • 首先,需要找到每行和每列的最大高度,这样就能确定每个位置上建筑物能增加高度的上限。
  • 然后,遍历矩阵中的每个位置,计算其能增加的高度(由所在行和列的最大高度中的较小值决定)。
  • 最后,累加所有能增加的高度,得到最终结果。

解题过程

  1. 初始化两个长度为 n 的整数数组 rowMax 和 colMax ,用于存储每行和每列的最大高度。
  2. 通过两个嵌套的循环分别计算每行和每列的最大高度,并存储在相应的数组中。
  3. 初始化一个变量 totalIncrease 为 0,用于累加可增加的高度总和。
  4. 再次通过两个嵌套的循环遍历矩阵,对于每个位置,计算其可增加的高度(即行和列最大高度中的较小值减去当前高度),如果可增加高度大于 0 ,则累加到 totalIncrease 中。

时间复杂度

  • 计算每行和每列的最大高度,需要遍历矩阵两次,每次遍历的时间复杂度为 O(n²) 
  • 计算可增加的高度总和,又需要遍历矩阵一次,时间复杂度为 O(n²) 
  • 总的时间复杂度为 O(n²) 

空间复杂度

使用了两个长度为 n 的辅助数组 rowMax 和 colMax ,以及一些固定大小的变量,空间复杂度为 O(n)

Code

class Solution {public int maxIncreaseKeepingSkyline(int[][] grid) {int n = grid.length;int[] rowMax = new int[n];int[] colMax = new int[n];// 计算每行的最大值for (int i = 0; i < n; i++) {int max = 0;for (int j = 0; j < n; j++) {max = Math.max(max, grid[i][j]);}rowMax[i] = max;}// 计算每列的最大值for (int j = 0; j < n; j++) {int max = 0;for (int i = 0; i < n; i++) {max = Math.max(max, grid[i][j]);}colMax[j] = max;}int totalIncrease = 0;// 计算可增加的高度总和for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {int increase = Math.min(rowMax[i], colMax[j]) - grid[i][j];if (increase > 0) {totalIncrease += increase;}}}return totalIncrease;}
}

 Doubt is the key to knowledge 

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

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

相关文章

网络安全策略:优先防护而非溯源的重要性

面对网络攻击&#xff0c;企业往往面临一个关键决策点&#xff1a;是立即投入资源进行攻击溯源&#xff0c;还是优先加强自身的防御体系。尽管溯源分析有助于了解攻击者的手段和动机&#xff0c;但在大多数情况下&#xff0c;优先强化防护是更为明智的选择。本文将探讨为何在遭…

LLM上下文长度扩展方案:YaRN

文章目录 I. 前言II. NTK-by-partsIII. YaRNIV. Dynamic NTK 题目&#xff1a; YaRN: Efficient Context Window Extension of Large Language Models 论文地址&#xff1a; YaRN: Efficient Context Window Extension of Large Language Models I. 前言 在之前的两篇文章中分…

RuoYi-后端管理项目入门篇1

目录 前提准备 下载若依前后端 Gitee 地址 准备环境 后端数据库导入 1 克隆完成 若依后端管理后端 Gitte 地址 :若依/RuoYi-Vue 2.1 创建Data Source数据源 2.2 填写好对应的数据库User 和 Password 点击Apply 2.3 新建一个Schema 2.4 填写对应数据库名称 这边演示写的…

【工具使用】adb下载和配置

【工具使用】adb下载和配置 一&#xff0c;简介二&#xff0c;操作步骤2.1 Bing搜索adb2.2 下载adb工具2.3 添加路径到环境变量 三&#xff0c;效果验证 一&#xff0c;简介 本文主要介绍如何下载adb并安装使用&#xff0c;供参考。 此时打开cmd&#xff0c;输入adb 会提示&am…

计算机网络——网络层(概念及IP地址划分)

目录 网络层概念 网络层向上层提供的两种服务 虚电路 网络提供数据报服务 虚电路服务与数据报服务的对比 网络层的两个层面 分组传送到路由器的运作 对网络层进行分层 网际协议IP 虚拟互联网络 IP地址 IP地址及其表示方法 IP地址的计算方式 IP地址的结构 …

每日一练,java

目录 描述示例 总结 描述 题目来自牛客网 •输入一个字符串&#xff0c;请按长度为8拆分每个输入字符串并进行输出&#xff1b; •长度不是8整数倍的字符串请在后面补数字0&#xff0c;空字符串不处理。 输入描述&#xff1a; 连续输入字符串(每个字符串长度小于等于100) 输…

用Java连接MySQL数据库的总结

✨个人主页&#xff1a; 不漫游-CSDN博客 前言 在日常开发中&#xff0c;使用Java连接MySQL数据库是一个常见的任务&#xff0c;涉及多个步骤。接着我就带着大家细细看来~ 一.下载.jar 包文件 1.什么是.jar 文件 通俗点讲就是一个压缩包&#xff0c;不过里面存放的都是由Java代…

算法热门工程师面试题(一)

BERT模型&#xff1a;请介绍BERT模型的基本原理及其在自然语言处理中的应用 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;模型是一种由Google在2018年提出的预训练语言模型&#xff0c;它在自然语言处理&#xff08;NLP&#xff09;…

Docker基本管理1

Docker 概述 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自…

1.27、基于径向基神经网络的曲线拟合(matlab)

1、基于径向基神经网络的曲线拟合简介及原理 1)原理简介 基于径向基神经网络(Radial Basis Function Neural Network, RBFNN)的曲线拟合是一种常用的非线性拟合方法,通过在输入空间中使用径向基函数对数据进行处理,实现对非线性关系的拟合。 RBFNN的基本原理是将输入空…

笔记 2 :linux 0.11 中的重要的全局变量 (a)

通过对全局变量的了解&#xff0c;也有助于了解整个代码的逻辑。就跟学习类一样&#xff0c;了解类有哪些成员变量&#xff0c;也有助于了解类的成员函数的功能。 以下介绍全局变量的顺序&#xff0c;符合这两本书的讲解顺序&#xff1a; &#xff08;1&#xff09;内存初始化相…

注册sublime text右键打开

&#x1f47d;个人博客&#xff1a;https://everspring.github.io/ &#x1f47d;公众号&#xff1a;爱历史的IT男 由于notepad作者的恶心操作&#xff0c;改用了sublime text。很强大&#xff0c;特别是plugin能力&#xff0c;强烈推荐。安装plugin没有右键打开文本的能力。网…

使用Python实现深度学习模型:文本生成与自然语言处理

引言 自然语言处理(NLP)是人工智能领域的重要分支,涉及计算机与人类语言的互动。文本生成是NLP中的一个关键任务,广泛应用于聊天机器人、自动写作和翻译等领域。本文将介绍如何使用Python和TensorFlow实现一个简单的文本生成模型,并提供详细的代码示例。 所需工具 Pytho…

解析Java中1000个常用类:EventObject类,你学会了吗?

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…

Kafka 高并发设计之数据压缩与批量消息处理

《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。 压缩&#xff0c;是一种用时间换空间的 trade-off 思想&#xff0c;用 CPU 的时间去换磁盘或者网络 I/O 传输量&#xff0c;用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。 Kafka 是一个高吞吐量、可扩展…

多文件编程:c/c++分文件写法(入门)

前言 一个 C 项目通常会采取 声明与定义分离 的方式进行编写&#xff0c;其基本遵循&#xff1a;头文件中写声明&#xff0c;源文件中写定义。 此外&#xff0c;为了区分头文件与源文件&#xff0c;会采用不同的文件后缀&#xff1a; .h: 头文件 .cpp: 源文件 (当然还有其他的…

写真图片视频打赏系统源码全开源无加密

这是一款开源的写真图片及视频打赏系统源码&#xff0c;顾名思义他可以做写真图片打赏站也可以做视频打赏站&#xff0c;支付对接了易支付&#xff0c;拥有独立代理后台&#xff0c;全部源码无加密&#xff0c;另外也可以配合付费进群使用。支付扣量、域名防洪这些基本的就不介…

Shell命令技巧

1. 计算1~100的和 1.1 生成表达式 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 echo {1…100} | tr " &qu…

VECTOR,ARRAYLIST, LINKEDLIST的区别是什么?

Vector、ArrayList 和 LinkedList 都是Java集合框架中的类&#xff0c;用于存储一系列的元素。它们各自有不同的实现和性能特点&#xff1a; 1. Vector: - Vector 是 java.util 包中的一个类&#xff0c;继承自 java.util.AbstractList 类&#xff0c;并实现了 List 接口。…

小白如何学习软件开发

众所周知&#xff0c;软件开发技术是IT技术的核心技术&#xff0c;也是从事IT职业的技术学习首选&#xff0c;因此不少人会去学习&#xff0c;下面我给大家分享关于软件开发学习方法有哪些&#xff0c;欢迎阅读! 1、明确学习目的 学习编程能锻炼思维&#xff0c;使我们的逻辑思…