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

Leetcode打卡:考场就坐

执行结果:通过

题目: 855 考场就坐

在考场里,有 n 个座位排成一行,编号为 0 到 n - 1

当学生进入考场后,他必须坐在离最近的人最远的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外,如果考场里没有人,那么学生就坐在 0 号座位上。)

设计一个模拟所述考场的类。

实现 ExamRoom 类:

  • ExamRoom(int n) 用座位的数量 n 初始化考场对象。
  • int seat() 返回下一个学生将会入座的座位编号。
  • void leave(int p) 指定坐在座位 p 的学生将离开教室。保证座位 p 上会有一位学生。

示例 1:

输入:
["ExamRoom", "seat", "seat", "seat", "seat", "leave", "seat"]
[[10], [], [], [], [], [4], []]
输出:
[null, 0, 9, 4, 2, null, 5]
解释:
ExamRoom examRoom = new ExamRoom(10);
examRoom.seat(); // 返回 0,房间里没有人,学生坐在 0 号座位。
examRoom.seat(); // 返回 9,学生最后坐在 9 号座位。
examRoom.seat(); // 返回 4,学生最后坐在 4 号座位。
examRoom.seat(); // 返回 2,学生最后坐在 2 号座位。
examRoom.leave(4);
examRoom.seat(); // 返回 5,学生最后坐在 5 号座位。

提示:

  1. 1 <= n <= 109
  2. 保证有学生正坐在座位 p 上。
  3. seat 和 leave 最多被调用 104 次。

代码以及解题思路

代码:

typedef struct mylink {int id;struct mylink *next;
} mylink;typedef struct {int length;mylink* root;
} ExamRoom;
void print_obj(ExamRoom *obj)
{printf("%d ",obj->length);mylink* tmp=obj->root;while(tmp!=NULL){printf("%d ",tmp->id);tmp=tmp->next;}printf("\n");
}ExamRoom* examRoomCreate(int n) {ExamRoom* obj=malloc(sizeof(ExamRoom));obj->length=n;obj->root=NULL;return obj;}int examRoomSeat(ExamRoom* obj) {if(obj->root==NULL){obj->root=malloc(sizeof(mylink));obj->root->id=0;obj->root->next=NULL;return 0;}int max=-1;if(obj->root->id!=0) max=obj->root->id;mylink* max_link_before=NULL;mylink* tmp=obj->root;int diff=0;while(tmp->next!=NULL){   diff=(tmp->next->id - tmp->id)/2;if(diff>max){max=diff;max_link_before=tmp;}tmp=tmp->next;}//tmp 为末尾时diff=obj->length -1 - tmp->id;if(diff>max){max=diff;max_link_before=tmp;}if(max_link_before==NULL){mylink* add=malloc(sizeof(mylink));add->id=0;add->next=obj->root;obj->root=add;return 0;}if(max_link_before->next==NULL){max_link_before->next=malloc(sizeof(mylink));max_link_before->next->id=obj->length-1;max_link_before->next->next=NULL;return obj->length-1;}else{mylink* add=malloc(sizeof(mylink));add->id=max_link_before->id + max;add->next=max_link_before->next;max_link_before->next=add;return add->id;}}void examRoomLeave(ExamRoom* obj, int p) {mylink* tmp=obj->root;mylink* before=NULL;while(tmp!=NULL){if(tmp->id==p){if(before==NULL){obj->root=tmp->next;free(tmp);}else{before->next=tmp->next;free(tmp);}return;}before=tmp;tmp=tmp->next;}}void examRoomFree(ExamRoom* obj) {mylink* tmp=obj->root;mylink* next;while(tmp!=NULL){next=tmp->next;free(tmp);tmp=next;}free(obj);}

解题思路:

1. 数据结构定义

  • mylink 结构体:表示链表中的一个节点,包含座位号 id 和指向下一个节点的指针 next
  • ExamRoom 结构体:表示考场,包含两个成员:length 表示考场总座位数,root 指向链表的头节点。

2. print_obj 函数

  • 作用:打印考场信息,包括总座位数和已分配的座位号。
  • 解题思路:首先打印总座位数 length,然后遍历链表,打印每个节点的座位号 id

3. examRoomCreate 函数

  • 作用:创建一个新的考场对象。
  • 解题思路:使用 malloc 分配 ExamRoom 结构体所需的内存,初始化 length 为传入的参数 nroot 初始化为 NULL(表示链表为空),最后返回创建的考场对象。

4. examRoomSeat 函数

  • 作用:在考场中分配一个座位,并返回分配的座位号。
  • 解题思路
    1. 如果链表为空(即还没有分配任何座位),则在链表头部插入一个座位号为 0 的节点,并返回 0
    2. 遍历链表,计算相邻座位之间的最大间距 max 和该间距前的节点 max_link_before
    3. 考虑链表末尾与最后一个座位之间的间距。
    4. 根据 max_link_before 的值,在最大间距处插入一个新节点:
      • 如果 max_link_before 为 NULL,则在链表头部插入新节点。
      • 如果 max_link_before->next 为 NULL,则在链表尾部插入新节点。
      • 否则,在 max_link_before 和 max_link_before->next 之间插入新节点。
    5. 新节点的座位号 id 为 max_link_before->id + max,然后返回新节点的座位号。

5. examRoomLeave 函数

  • 作用:释放一个座位。
  • 解题思路:遍历链表,找到座位号为 p 的节点,并将其从链表中删除。如果要删除的节点是头节点,则更新头节点为下一个节点;否则,更新前一个节点的 next 指针,跳过要删除的节点。最后释放要删除的节点的内存。

6. examRoomFree 函数

  • 作用:释放考场对象及其占用的所有内存。
  • 解题思路:遍历链表,释放每个节点的内存,然后释放考场对象本身的内存。

相关文章:

Leetcode打卡:考场就坐

执行结果&#xff1a;通过 题目&#xff1a; 855 考场就坐 在考场里&#xff0c;有 n 个座位排成一行&#xff0c;编号为 0 到 n - 1。 当学生进入考场后&#xff0c;他必须坐在离最近的人最远的座位上。如果有多个这样的座位&#xff0c;他会坐在编号最小的座位上。(另外&am…...

数据库压力测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 很多人提到 jmeter 时&#xff0c;只会说到 jmeter进行接口自动化或接口性能测试&#xff0c;其实jmeter还能对数据库进行自动化操作。个人常用的场景有以下&#…...

项目测试方案流程详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 作为一名软件测试工程师&#xff0c;为项目制作完成的测试方案并执行&#xff0c;是我们日常工作的重要部分&#xff0c;同时&#xff0c;也是一名合格的软件测试工…...

以二进制形式创建gitea仓库

1、官方文档&#xff1a; 数据库准备 | Gitea Documentation 使用二进制文件安装 | Gitea Documentation 2、具体操作 1&#xff09;创建gitea数据库 2&#xff09;检查是否安装 Git。要求 Git 版本 > 2.0。 如需升级git请参考以下链接&#xff1a;linux升级git版本-C…...

Spring(七)Spring Cloud----Feign、Zuul和Apollo

文章目录 一、服务调用Feign1.1 Feign的基本使用1.2 Feign的属性配置1.2.1 Ribbon配置1.2.2 Hystrix配置 二、网关服务Zuul2.1 Zuul的基本使用2.1.1 请求路由2.1.2 请求过滤 2.2 路由详解2.2.1 传统路由配置2.2.2 服务路由配置2.2.3 服务路由的默认规则2.2.4 自定义路由映射规则…...

*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数

选素数 小蓝有一个数 x&#xff0c;每次操作小蓝会选择一个小于 x 的素数 p&#xff0c;然后在 x 成为 p 的倍数前不断将 x 加 1&#xff0c;&#xff08;如果 x 一开始就是 p 的倍数则 x 不变&#xff09;。 小乔看到了小蓝进行了 2 次上述操作后得到的结果 n&#xff0c;他想…...

华为云环境下LVS/DR架构的故障诊断优化

本文作者&#xff1a;刘涛 文章目录 前言1.LVS/DR集群的问题2.华为云环境3.问题排查3.1 检查LVS/DR模式配置3.1.1 RS服务器3.1.2 DS服务器 3.2 继续分析抓包结果3.2.1 调整tcpdump抓包过滤条件3.2.2 client向集群VIP发包3.2.3 DS服务器arp消息 3.3 查看丢包3.3.1 监控DS和RS服…...

leetcode hot100除自身以外的数组的乘积

238. 除自身以外数组的乘积 已解答 中等 相关标签 相关企业 提示 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在…...

SQL server学习09-数据库编程(上)

目录 一&#xff0c;了解T-SQL语言 1&#xff0c;常量&#xff08;标量值&#xff09; 2&#xff0c;变量 1&#xff09;局部变量 2&#xff09;全局变量 二&#xff0c;内置函数 1&#xff0c;字符串函数 2&#xff0c;数学函数 3&#xff0c;日期时间函数 4&#x…...

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

在刚刚过去的 FlutterInProduction 活动里&#xff0c;Flutter 官方除了介绍「历史进程」和「用户案例」之外&#xff0c;也着重提及了未来相关的 roadmap &#xff0c;其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…...

java全栈day19--Web后端实战(java操作数据库3)

一、MyBatis 1.1介绍 前提引入&#xff1a; controller(控制层)作用&#xff1a;接受请求&#xff0c;响应数据 service(业务层)作用&#xff1a;负责具体的逻辑处理 dao(持久层)作用&#xff1a;数据访问层 一般的访问流程&#xff1a;浏览器发起请求过来&#xff0c;先…...

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页

本文内容来自YashanDB官网&#xff0c;原文内容请见 https://www.yashandb.com/newsinfo/7802958.html?templateId1718516 问题现象 Mybatis-Plus是Mybatis的增强工具&#xff0c;旨在简化开发者的CRUD操作&#xff0c;目前被广泛应用&#xff0c;Mybatis-Plus框架适配了多种…...

Ansible 批量管理华为 CE 交换机

注&#xff1a;本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地&#xff1a;贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具&#xff0c;AnsibleWorks 成立于 2012 年&a…...

基于自定义注解与 AOP 切面实现接口日志全面数据库存储

基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中&#xff0c;详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…...

GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件

一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Linux可执行文件,从而显著提高启动速度…...

单片机:实现驱动超声波(附带源码)

单片机实现驱动超声波模块 超声波模块&#xff08;如HC-SR04&#xff09;广泛应用于距离测量、避障系统、自动驾驶等嵌入式项目中。它能够通过发射超声波信号并接收反射波来计算物体的距离。本文将介绍如何使用单片机&#xff08;如51系列单片机&#xff09;驱动超声波模块&am…...

2025.01.15python商业数据分析top2

一、 导入项目 导入项目、准备项目数据 import pandas as pd# 文件路径为python文件位置下的相对路径dwxpd.read_excel("电蚊香套装市场近三年交易额.xlsx") fmfzpd.read_excel("防霉防蛀片市场近三年交易额.xlsx") msmcpd.read_excel("灭鼠杀虫剂市…...

信息系统项目管理-绩效考核

1.1.组织战略 组织的产品和服务战略的类型通常可以分为&#xff1a;技术密集型、&#xff08;&#xff09;、目标动态型。 A市场导向型 B成本导向型 C人力密集型 D产品导向型 答案B 在组织的四项基本能力中&#xff0c;建立战略性奖励措施&#xff0c;根据员工对组织的贡献&am…...

【Linux】数据呈现

一、数据的输入与输出 1、标准文件描述符 Linux系统会将每个对象都当做文件来处理&#xff0c;包括输入和输出。它用文件描述符来标识每个文件对象。 文件描述符是一个非负整数&#xff0c;唯一会标识的是会话中打开的文件。每个进程一次最多可以打开9个文件描述符。bash sh…...

oracle 加字段和字段注释 sql

在 Oracle 数据库中&#xff0c;你可以使用 ALTER TABLE 语句来添加字段&#xff0c;并使用 COMMENT ON COLUMN 语句来添加字段注释。以下是一个示例&#xff1a; 假设你有一个名为 employees 的表&#xff0c;你想要添加一个名为 email 的字段&#xff0c;并为其添加注释。 …...

ai辅助开发:让快马生成智能助手,链接notepad下载与个性化代码推荐

今天想和大家分享一个有趣的实践&#xff1a;如何用AI辅助开发的方式&#xff0c;让Notepad这个老牌文本编辑器焕发新生。我们平时下载Notepad可能只是简单获取软件&#xff0c;但如果结合AI能力&#xff0c;就能把"下载-使用"的流程升级成"智能助手"体验。…...

UReport2实战:如何优雅地导出多Sheet页报表(动态/静态分页全解析)

UReport2实战&#xff1a;如何优雅地导出多Sheet页报表&#xff08;动态/静态分页全解析&#xff09; 在数据驱动的商业环境中&#xff0c;报表导出功能已成为企业级应用的标配需求。当面对海量数据时&#xff0c;传统的单Sheet页Excel导出方案往往导致文件臃肿、查阅困难。URe…...

OFA模型微调实战:适配特定领域的小样本学习

OFA模型微调实战&#xff1a;适配特定领域的小样本学习 用最少的数据&#xff0c;让通用大模型听懂你的专业语言 1. 引言&#xff1a;当通用模型遇到专业领域 你有没有遇到过这样的情况&#xff1a;一个在通用场景下表现优秀的AI模型&#xff0c;一到你的专业领域就"水土…...

Qwen3-Reranker-0.6B效果展示:中英术语对照表构建中的跨语言排序

Qwen3-Reranker-0.6B效果展示&#xff1a;中英术语对照表构建中的跨语言排序 1. 跨语言术语排序的技术挑战 在全球化信息时代&#xff0c;构建准确的中英术语对照表已成为跨语言交流、技术文档翻译和国际合作的重要基础。传统方法往往面临几个核心痛点&#xff1a; 语义鸿沟…...

NaViL-9B多模态提示词工程:提升图文理解准确率的10个实用技巧

NaViL-9B多模态提示词工程&#xff1a;提升图文理解准确率的10个实用技巧 1. 认识NaViL-9B多模态模型 NaViL-9B是一款原生支持多模态交互的大语言模型&#xff0c;能够同时处理文本和图像输入。与传统的纯文本模型不同&#xff0c;它可以直接"看懂"图片内容&#x…...

零中断迁移:企业级文档系统全流程实战指南

零中断迁移&#xff1a;企业级文档系统全流程实战指南 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本&#xff0c;也可以自己运行或参与开发。源项目地址&…...

如何用QuickRecorder解决macOS录屏痛点:高效专业的从入门到精通实践指南

如何用QuickRecorder解决macOS录屏痛点&#xff1a;高效专业的从入门到精通实践指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitco…...

QQ音乐加密音频终极解密指南:qmcdump完整教程与实战应用

QQ音乐加密音频终极解密指南&#xff1a;qmcdump完整教程与实战应用 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是…...

WSABuilds社区活动:线上线下聚会与开发者大会参与指南

WSABuilds社区活动&#xff1a;线上线下聚会与开发者大会参与指南 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root sol…...

WarcraftHelper终极指南:让魔兽争霸3在现代系统完美重生

WarcraftHelper终极指南&#xff1a;让魔兽争霸3在现代系统完美重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的各…...