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

长沙岳麓区做网站河北中保建设集团网站首页

长沙岳麓区做网站,河北中保建设集团网站首页,代运营公司网站,一流的购物网站建设文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:砖墙 出处:554. 砖墙 难度 5 级 题目描述 要求 你的面前有一堵矩形的、由 n\texttt{n}n 行砖块组成的砖墙。这些砖块高度相同&#xff08…

文章目录

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

题目

标题和出处

标题:砖墙

出处: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 是砖墙的行数。需要使用哈希表记录每一行的除了最后一块砖的每块砖的右边缘与砖墙左端的距离和次数。

http://www.yayakq.cn/news/312650/

相关文章:

  • 个人网站也要备案吗网站没有后台怎么更新文章
  • 中山哪家做网站好网站后续建设
  • 移动办公型网站开发网页设计师制作培训
  • 做手机网站的公司流量推广怎么做
  • 网站建设编程软件wordpress支付宝应用网关设置
  • 社交网站开发实例网站建设需要注意哪些关键细节
  • 有口碑的免费网站建设电子商务网站建设步骤有什么
  • 网站规划和建设的基本步骤深圳有几个区分别是什么
  • 做网站时点击显示_count-views_all wordpress
  • 网站开发属于软件设计嘛低代码开发平台 免费
  • php 上传到网站wordpress 单本
  • 自己做的网站怎么打开网站专题策划页面怎么做
  • 网站字体设计规范触屏手机网站模板
  • 欧美电影免费网站网站上广告
  • 自己做网站卖东西需要交税吗外贸大型门户网站制作
  • 福建省建设职业管理中心网站上海地图
  • 免备案云服务器租用seo问答
  • 网站开发中界面河北省建设机械协会是正规网站吗
  • 企业网站模板购买自学网站建设看哪本书
  • 武清做网站公司设计和建设企业网站心得和体会
  • 网站经常被黑网站注册免费永久
  • 象山区网站建设学网站建设难
  • 网站建设小说毕业设计网络服务器施工方案
  • 网站的构建一般要多久如何注册国外域名
  • 怀远网站建设中科诚建建设工程有限公司网站
  • 如何上传网站风景网站模版
  • 做网站后台系统的规范个人网站作品
  • 房屋结构自建设计 网站上海网站注销
  • 东莞网站建设网站建设多少钱获取网站验证码地址
  • 可以做app的网站除了91还有什么关键词