发布时间:2026/9/5 2:39:56
A.每日一题:1386. 安排电影院座位 题目链接1386. 安排电影院座位中等算法原理解法一模拟时间复杂度O(mn)空间复杂度O(n)①直接开出 n 行 10 列的二维 boolean 数组如果对应位置已经被预订则直接标记为 true②循环遍历每一行对于每一行的固定四个位置做出如下标记1座位块12345 记为 t12座位块24567 记为 t23座位块36789 记为 t3从左往右遍历检查 t1 是否全未被占用如果是总数 cnt为了最大化总数不必检查 t2 直接去检查 t3如果 t1 和 t3 都是 false则再去检查 t2 这个中间位置能否坐一个小组③但是这种做法会导致超出内存限制因为这个做法的空间复杂度为 O(N)而测试用例的 N 可以非常大我们直接开 n 行的空间会直接引发超出内存限制~~哈希表优化17ms击败67.17%时间复杂度O(m)空间复杂度O(m)原问题痛点就在于题目测试用例的 n 可以达到 10⁹直接开 boolean[n][10] 数组直接爆内存而绝大多数行完全没有被预订座位这些行直接可以放两个组完全不需要存储所以我们使用 哈希表 HashMapInteger,boolean[] 只保存有被预订座位的行key行号value该行10个座位占用标记①没有出现在 hash 中的行全部空位直接贡献 2 不用处理②只对有预订的行做三块窗口判断解法二位运算19ms击败38.37%时间复杂度O(m)空间复杂度O(m)大致思路不变~~一行一共10个座位编号1~10→数组下标0~9我们可以直接用一个 int 整数的 bit 位标记座位当 bit 0 时代表全是空位三个合法区间t1下标1234对应掩码0b11110bit:9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 1 1 1 1 0t2下标3456对应掩码0b1111000bit:9 8 7 6 5 4 3 2 1 0 0 0 0 1 1 1 1 0 0 0t3下标5678对应掩码0b111100000bit:9 8 7 6 5 4 3 2 1 0 0 1 1 1 1 0 0 0 0 0当mask掩码0代表区间内没有座位被占可以坐一组掩码只把关心的 4 位设成1其他全部都是 0按位与只会保留这 4 位的信息其他 bit 直接清零丢弃~~Java代码class Solution { //1386. 安排电影院座位 //解法模拟 //未优化超出内存限制 public int maxNumberOfFamilies(int n, int[][] reservedSeats) { boolean[][] gridnew boolean[n][10]; for(int[] r:reservedSeats) grid[r[0]-1][r[1]-1]true; int cnt0; for(int i0;in;i){ boolean t1true,t2true,t3true; //判断第一个固定位置是否可行但凡有一个被占就不可行 for(int j1;j5;j) if(grid[i][j]){t1false;break;} if(t1) cnt; //直接判断第三个位置避免重复 for(int j5;j9;j) if(grid[i][j]){t3false;break;} if(t3) cnt; if(!t1!t3){//如果第一个和第三个都不可行再判断第二个位置 for(int j3;j7;j) if(grid[i][j]){t2false;break;} if(t2) cnt; } } return cnt; } }class Solution { //1386. 安排电影院座位 //解法模拟 //哈希表优化 public int maxNumberOfFamilies(int n, int[][] reservedSeats) { MapInteger,boolean[] hashnew HashMap(); for(int[] r:reservedSeats){ //没有这一行就新建一个长度为 10 的 boolean 数组 hash.computeIfAbsent(r[0]-1,_-new boolean[10]); hash.get(r[0]-1)[r[1]-1]true; } //所有无预订的行每行可以直接坐两组 int cnt(n-hash.size())*2; //遍历只有预订的行 for(boolean[] grid:hash.values()){ boolean t1true,t2true,t3true; //判断第一个固定位置是否可行但凡有一个被占就不可行 for(int j1;j5;j) if(grid[j]){t1false;break;} if(t1) cnt; //直接判断第三个位置避免重复 for(int j5;j9;j) if(grid[j]){t3false;break;} if(t3) cnt; if(!t1!t3){//如果第一个和第三个都不可行再判断第二个位置 for(int j3;j7;j) if(grid[j]){t2false;break;} if(t2) cnt; } } return cnt; } }class Solution { //1386. 安排电影院座位 //解法位运算 public int maxNumberOfFamilies(int n, int[][] reservedSeats) { //key行号valueint掩码记录该行哪些座位被占 MapInteger,Integer hashnew HashMap(); for(int[] r:reservedSeats){ int rowr[0]-1; int colr[1]-1; //如果hash里已经存过这一行取出之前的mask //如果hash里没有这一行返回0代表这一行座位全是空的 int maskhash.getOrDefault(row,0); //把 col 对应的 bit 置为1 mask|(1col);//col必然不为0 hash.put(row,mask); } //没有任何预订的行每行直接放2组 int cnt(n-hash.size())*2; //三个区间掩码 final int mask10b11110;//下标1234 final int mask20b1111000;//下标3456 final int mask30b111100000;//下标5678 for(int mask:hash.values()){ boolean t1(maskmask1)0; if(t1) cnt; boolean t3(maskmask3)0; if(t3) cnt; //左右都不行才检查中间t2 if(!t1!t3){ boolean t2(maskmask2)0; if(t2) cnt; } } return cnt; } }

相关新闻

2026/9/5 2:39:56

数智码力:Python文件操作实战教程,批量处理文件零基础全覆盖

文件操作是Python最实用的基础技能之一,也是办公自动化、数据处理、爬虫开发的核心必备能力。日常工作中,手动整理文件、读写文档、批量重命名、批量删除、读取数据、保存结果耗时费力,而通过Python文件操作代码,可一键实现各类文…

2026/9/5 2:39:56

微信个微API接口(微信个微API怎么接入)

本文约1900字,预计需要8分钟阅读知更Ai(zhigengai.com)微信个微API接口,很多做私域、客服系统、社群工具的团队,最终都会碰到同一个问题——"我想让程序自动收发微信消息,但微信官方只对企业微信开放了…

2026/9/5 3:50:03

域控组策略配置:统一桌面壁纸实战指南

在企业域环境中,统一桌面壁纸是标准化办公环境的基础操作之一。本文将从零开始,手把手教你通过 Windows 域组策略 为所有域用户强制设置统一的桌面壁纸,并附上常见避坑要点。 文章目录📌 环境准备第一步:创建壁纸共享文…

2026/9/5 3:50:03

餐饮外卖孵化运营公司靠谱怎么判断

随着餐饮外卖赛道竞争加剧,不少创业者希望借助专业服务商的能力降低试错成本,但市场中服务商水平参差不齐,学会判断靠谱的餐饮外卖孵化运营公司,是开展合作前的关键一步。看服务模式是否匹配长期成长需求 靠谱的餐饮外卖孵化运营公…

2026/9/5 3:50:03

计算机毕业设计之基于Javaweb设计球型关节人偶(BJD)网站

本文介绍了一款使用SpringBoot和Vue开发的设计球型关节人偶(BJD)网站,及其设计与实现过程。根据软件工程对软件系统开发定制的规则和标准,详细的介绍了系统的分析与设计过程,并且详细的概括了系统的开发与测试过程。本文的管理系统使用了java…

2026/9/5 3:50:03

从模糊创意到可运行项目:基于Python的AI角色模拟开发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 3:45:03

SHF与塔尔塔洛斯可动人偶手型连接设计对比与改造指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 2:46:54

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/5 2:46:52

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/5 2:44:34

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/5 0:04:47

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流在大模型流式输出(Streaming)与智能体实时推流的架构中,生产环境中经常出现一种“上下游生产消费速率严重失衡”的极端情况: 生产端极速产出:大模型…

2026/9/5 2:45:13

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/5 2:46:50

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…