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

哈希表题目:砖墙

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:砖墙

出处:554. 砖墙

难度

5 级

题目描述

要求

你的面前有一堵矩形的、由 n\texttt{n}n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和相等。

你现在要画一条自顶向下的、穿过最少砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。

给你一个二维数组 wall\texttt{wall}wall,该数组包含这堵墙的相关信息。其中,wall[i]\texttt{wall[i]}wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线穿过的砖块数量最少,并且返回穿过的砖块数量

示例

示例 1:

示例 1

输入:wall=[[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]]\texttt{wall = [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]]}wall = [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]]
输出:2\texttt{2}2

示例 2:

输入:wall=[[1],[1],[1]]\texttt{wall = [[1],[1],[1]]}wall = [[1],[1],[1]]
输出:3\texttt{3}3

数据范围

  • n=wall.length\texttt{n} = \texttt{wall.length}n=wall.length
  • 1≤n≤104\texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{4}1n104
  • 1≤wall[i].length≤104\texttt{1} \le \texttt{wall[i].length} \le \texttt{10}^\texttt{4}1wall[i].length104
  • 1≤sum(wall[i].length)≤2×104\texttt{1} \le \texttt{sum(wall[i].length)} \le \texttt{2} \times \texttt{10}^\texttt{4}1sum(wall[i].length)2×104
  • 对于每一行 i\texttt{i}isum(wall[i])\texttt{sum(wall[i])}sum(wall[i]) 是相同的
  • 1≤wall[i][j]≤231−1\texttt{1} \le \texttt{wall[i][j]} \le \texttt{2}^\texttt{31} - \texttt{1}1wall[i][j]2311

解法

思路和算法

任意一条垂线在每一行都是穿过砖块或者从砖块的边缘经过,且穿过砖块的数量与从砖块的边缘经过的数量之和一定等于砖墙的行数 nnn。为了找到穿过最少砖块的垂线,应该找到经过最多的砖块边缘的垂线,砖墙的行数与该垂线经过的砖块边缘的数量之差即为穿过的砖块数量的最小值。

为了找到经过最多的砖块边缘的垂线,需要统计从砖墙左端开始的所有不同距离的砖块边缘的数量,并用哈希表记录所有距离对应的砖块边缘的数量。

对于砖墙的每一行,从左到右遍历每一块砖,并维护砖块宽度之和,砖块宽度之和即为当前砖块的右边缘与砖墙左端的距离。对于每一块砖,将其宽度加到砖块宽度之和中,并将更新后的砖块宽度之和在哈希表中的次数加 111。由于不能沿着墙的两个垂直边缘之一画线,因此每一行的最后一块砖不用遍历。

由于题目没有要求得到画线的位置,只要求得到穿过的砖块数量的最小值,因此在遍历结束砖墙的全部行之后,只需要从哈希表中得到砖块边缘数量的最大值,不需要得到砖块边缘与砖墙左端的距离。得到砖块边缘数量的最大值之后,计算砖墙的行数与砖块边缘数量的最大值之差,即为穿过的砖块数量的最小值。

代码

class Solution {public int leastBricks(List<List<Integer>> wall) {int n = wall.size();Map<Long, Integer> map = new HashMap<Long, Integer>();for (List<Integer> row : wall) {long sum = 0;int bricks = row.size();for (int i = 0; i < bricks - 1; i++) {sum += row.get(i);map.put(sum, map.getOrDefault(sum, 0) + 1);}}int maxCount = 0;Set<Map.Entry<Long, Integer>> entries = map.entrySet();for (Map.Entry<Long, Integer> entry : entries) {int count = entry.getValue();maxCount = Math.max(maxCount, count);}return n - maxCount;}
}

复杂度分析

  • 时间复杂度:O(mn)O(mn)O(mn),其中 mmm 是砖墙每一行的平均砖块数量,nnn 是砖墙的行数。需要遍历砖墙中的每一行的除了最后一块砖的每块砖,并用哈希表记录每块砖的右边缘与砖墙左端的距离和次数。

  • 空间复杂度:O(mn)O(mn)O(mn),其中 mmm 是砖墙每一行的平均砖块数量,nnn 是砖墙的行数。需要使用哈希表记录每一行的除了最后一块砖的每块砖的右边缘与砖墙左端的距离和次数。

相关文章:

哈希表题目:砖墙

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题&#xff1a;砖墙 出处&#xff1a;554. 砖墙 难度 5 级 题目描述 要求 你的面前有一堵矩形的、由 n\texttt{n}n 行砖块组成的砖墙。这些砖块高度相同&#xff08…...

【程序环境详解】

每个源程序&#xff08;.c文件&#xff09;都需要经过编译链接形成 .exe的可执行文件。 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境 第一种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。第二种是执行环境&#xff0c;它用于实际执行代码…...

栈(Stack)

目录 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1. 改变元素的序列 2. 将递归转化为循环 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为…...

【计算机网络】2、网络编程模型理论

文章目录一、网络基本概念1.1 网段1.2 子网掩码 netmask1.3 子网 subnet1.4 网络地址 network1.5 实战 192.168.0.1/27 的含义二、socket2.1 sockaddr 格式2.1.1 IPv4 sockaddr 格式2.1.2 IPv6 sockaddr 格式2.1.3 本地 sockaddr 格式2.2 http 与 websocket三、TCP 编程3.1 ser…...

jmeter接口测试及详细步骤以及项目实战教程

如果看完这篇文章还是不太明白的话&#xff0c;可以看看下面这个视频 2023年B站最新Jmeter接口测试实战教程&#xff0c;精通接口自动化测试只需要这一套视频_哔哩哔哩_bilibili2023年B站最新Jmeter接口测试实战教程&#xff0c;精通接口自动化测试只需要这一套视频共计16条视…...

抖音进攻,B站退守

“爱优腾芒”等长视频平台的崛起&#xff0c;在一定层面上丰富了人们的日常生活&#xff0c;而抖音、快手等短视频平台的出现&#xff0c;则在很大程度上改变了用户观看视频的方式。只不过&#xff0c;近几年&#xff0c;随着流量增长逐渐遭遇瓶颈&#xff0c;各视频平台便纷纷…...

2022国赛E题完整成品文章数据代码模型--小批量物料的生产安排

基于LSTM循环神经网络的小批量物料生产安排分析 摘要 某电子产品制造企业面临以下问题&#xff1a;在多品种小批量的物料生产中&#xff0c;事先无法知道物料的 实际需求量。企业希望运用数学方法&#xff0c;分析已有的历史数据&#xff0c;建立数学模型&#xff0c;帮助企业…...

学生党,快来 Azure 一起学习 OpenAI (一):注册 Azure 和申请 OpenAI

大家好我是微软学生大使 Jambo , 在刚结束的微软学生开发者峰会 2023中我们了解到微软为学生提供了 Azure for Student 大礼包&#xff0c;通过 Azure for Student 除了学习和部署云原生的应用外&#xff0c;还可以申请使用 Microsoft OpenAI Service 。在这个 AIGC 火热的年代…...

深入理解【正则化的L1-lasso回归和L2-岭回归】以及相关代码复现

正则化--L1-lasso回归和L2-岭回归1- 过拟合 欠拟合 模型选择2- 正则L1与L23- L2正则代码复现3-1 底层逻辑实现3-2 简洁实现1- 过拟合 欠拟合 模型选择 1-1 欠拟合&#xff1a; 在训练集和测试集上都不能很好的拟合数据【模型过于简单】 原因&#xff1a; 学习到的数据特征过少 …...

入侵检测——如何实现反弹shell检测?

反弹shell的本质&#xff1a;就是控制端监听在某TCP/UDP端口&#xff0c;被控端发起请求到该端口&#xff0c;并将其命令行的输入输出转到控制端。reverse shell与telnet&#xff0c;ssh等标准shell对应&#xff0c;本质上是网络概念的客户端与服务端的角色反转。 反弹shell的结…...

Python常用语句学习

人生苦短&#xff0c;我用Python。 ——吉多范罗苏姆 文章目录前言一、判断语句&#xff08;一&#xff09;if语句1. 作用2. 构成3. 语法4. 样例5.说明&#xff08;二&#xff09;if嵌套二、循环语句&#xff08;一&#xff09;while循环1. 作用2. 语法3. 样例4. 说明&#xff…...

测试3年还不如应届生,领导一句点醒:“公司不是只雇你来点点点的”

你的身边&#xff0c;是否有这样的景象&#xff1f; A&#xff1a;写了几年代码&#xff0c;写不下去了&#xff0c;听说测试很好上手&#xff0c;先来做几年测试 。 B&#xff1a;小文员一枚&#xff0c;想入行 IT&#xff0c;听说测试入门简单&#xff0c;请问怎么入行 。 …...

华为网络设备之路由策略,前缀列表(使用,规则)

华为网络之路由策略 前言&#xff1a;在企业网络的设备通信中&#xff0c;常面临一些非法流量访问的安全性及流量路径不优等问题&#xff0c;故为保证数据访问的安全性、提高链路带宽利用率&#xff0c;就需要对网络中的流量行为进行控制&#xff0c;如控制网络流量可达性、调…...

白噪音简介与实现

一、简介&#xff1a; 白噪音&#xff08;White Noise&#xff09;是一种具有平均功率频谱密度的噪音信号&#xff0c;其功率在所有频率上均匀分布。白噪音是一种随机信号&#xff0c;其包含所有频率成分的等幅随机振荡。因此&#xff0c;白噪音看起来像是一种随机的“嘈杂声”…...

Springboot结合线程池的使用

1.使用配置文件配置线程的参数 配置文件 thread-pool:core-size: 100max-size: 100keep-alive-seconds: 60queue-capacity: 1配置类 Component ConfigurationProperties("thread-pool") Data public class ThreadPoolConfig {private int coreSize;private int ma…...

AOP工作流程

AOP工作流程3&#xff0c;AOP工作流程3.1 AOP工作流程流程1:Spring容器启动流程2:读取所有切面配置中的切入点流程3:初始化bean流程4:获取bean执行方法验证容器中是否为代理对象验证思路步骤1:修改App类,获取类的类型步骤2:修改MyAdvice类&#xff0c;不增强步骤3:运行程序步骤…...

Modbus相关知识点及问题总结

本人水平有限&#xff0c;写得不对的地方望指正 困惑&#xff1a;线圈状态的值是否是存储在线圈寄存器里面&#xff1f;是否有线圈寄存器的说法&#xff1f;网上有说法说是寄存器占两个字节&#xff0c;但线圈的最少操作单位是位。类似于继电器的通断状态&#xff0c;直接根据电…...

【MySQL】函数

文章目录1. DQL执行顺序2. 函数2.1 字符串函数2.2 数值函数2.3 日期函数2.4 流程函数2.5 窗口函数2.5.1 介绍2.5.2 聚合窗口函数2.5.3 排名窗口函数2.5.4 取值窗口函数1. DQL执行顺序 2. 函数 2.1 字符串函数 函数功能concat(s1,s2,…sn)字符串拼接&#xff0c;将s1,s2…sn拼…...

MySQL高级

一、基础环境搭建 环境准备&#xff1a;CentOS7.6&#xff08;系统内核要求是3.10以上的&#xff09;、FinalShell 1. 安装Docker 帮助文档 : https://docs.docker.com/ 1、查看系统内核&#xff08;系统内核要求是3.10以上的&#xff09; uname -r2、如果之前安装过旧版本的D…...

带你弄明白c++的4种类型转换

目录 C语言中的类型转换 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast RTTI 常见面试题 这篇博客主要是帮助大家了解和学会使用C中规定的四种类型转换。首先我们先回顾一下C语言中的类型转换。 C语言中的类型转换 在C语言中&#xff0c;如果赋…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...