leetcode每日一题day20(24.9.30)——座位预约管理系统

news2024/11/6 9:30:39


思路:由于一直是出最小的编号,并且除此之外只有添加元素的操作,如果使用数组存储,并记录,这样出最小编号时间是O(n)复杂度,释放一个座位则是O(1)在操作出线机会均等的情况下,平均是O(n/2),

        但对于这种重复 出最大或最小,并添加元素,堆有更好的性能,

此处贴出自己实现的,堆排序,建堆可以优化,此时复杂度递推复杂度为T(n)=log2N+2T(n/2)

void adJustDown(int *pInt, int size) {//构建堆***********************************有问题可优化
    for (int read = 2; read <= size; read++) {//从第二个元素开始构造堆,以1为起始坐标
        int t = read;
        while (t != 1) {//调整到根时结束
            int fa = t % 2 == 0 ? t / 2 : (t - 1) / 2;//找到父亲
            if (pInt[t - 1] > pInt[fa - 1]) {//大于父亲进行调整,且由于下标0起需要在1起的情况下减一
                pInt[t - 1] ^= pInt[fa - 1];
                pInt[fa - 1] = pInt[t - 1] ^ pInt[fa - 1];
                pInt[t - 1] ^= pInt[fa - 1];
                t = fa;
            } else {//一次调整完成
                break;
            }
        }
    }
}

void Heapsort(int pInt[], int size) {
    adJustDown(pInt, size);
    int t = size;//以t指向未排序元素的最后一个元素
    while (t > 1) {
        pInt[t - 1] ^= pInt[0];//出最大元素,为了维持堆完全二叉树的性质将未排序的最后一个元素放到堆顶再进行向下调整
        pInt[0] = pInt[0] ^ pInt[t - 1];
        pInt[t - 1] ^= pInt[0];
        t -= 1;
        int i = 1;
        while (i <= t / 2) {//大于t/2就是叶子节点了
            int maxIdx =
                    i * 2 + 1 > t ? i * 2 : pInt[i * 2 - 1] > pInt[i * 2] ? i * 2 : i * 2 + 1;//孩子值中较大的一个的坐标考虑只有左孩子情况
            pInt[i - 1] ^= pInt[maxIdx - 1];//调整
            pInt[maxIdx - 1] = pInt[i - 1] ^ pInt[maxIdx - 1];
            pInt[i - 1] ^= pInt[maxIdx - 1];
            i = maxIdx;
        }
    }
}

堆的性质:

        一棵完全二叉树:所有它可以使用一维数组完美存储

(一个节点假设其存在X下标,其左孩子则存在2*X右孩子存在2*X+1,这样对于任一一个堆或者说完全二叉树都是可以用一个一维数组完美存下。)(可以尝试思考一下)

        根元素为所有元素中优先级最高的元素,每次对堆进行取值,都将取下根,可以使用将最后一个元素换上来,并再次调整堆,使取值后的堆仍可保持堆的性质

        上述排序操作即为,一直重复上一个操作,则可得到一个以优先级为顺序的序列而达到排序效果,


现在回归题目

       对于安排最小的座位,我们便可依据此,建立小顶堆,这样安排最小座位便是取根元素,取完进行调整,释放座位操作,可以理解为插入一个元素在数组末尾,并从尾到头进行调整便可。

当然也可使用内置api,这样只需理解大概,不需要了解如何实现。

class SeatManager {
public:
    vector<int> available;

    SeatManager(int n) {
        for (int i = 1; i <= n; ++i){
            available.push_back(i);
        }
    }
    
    int reserve() {
        pop_heap(available.begin(), available.end(), greater<int>());
        int tmp = available.back();
        available.pop_back();
        return tmp;
    }
    
    void unreserve(int seatNumber) {
        available.push_back(seatNumber);
        push_heap(available.begin(), available.end(), greater<int>());
    }
};

这样 分配座位的时间就分摊到,释放座位上了,时间复杂度都是,O(log2N)

但在正确的操作下,建堆需要O(N)时间,我堆排序的建堆过程随能达到效果但冗余过多

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

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

相关文章

CANoe_trace介绍以及如何使用C#仿制trace方案介绍

C#UI界面仿制trace界面介绍--初次制作&#xff0c;后续待完善 在汽车电子开发中&#xff0c;DBC&#xff08;Database Container&#xff09;文件对于定义和描述CAN&#xff08;Controller Area Network&#xff09;通信协议至关重要。随着项目的迭代和功能的扩展&#xff0c;手…

Elasticsearch 开放推理 API 增加了对 Google AI Studio 的支持

作者&#xff1a;来自 Elastic Jeff Vestal 我们很高兴地宣布 Elasticsearch 的开放推理 API 支持 Gemini 开发者 API。使用 Google AI Studio 时&#xff0c;开发者现在可以与 Elasticsearch 索引中的数据进行聊天、运行实验并使用 Google Cloud 的模型&#xff08;例如 Gemin…

0基础学前端 day7

大家好&#xff0c;欢迎来到无限大的频道 今天继续带领大家来了解前端的知识&#xff0c;深入了解互联网和浏览器背后的技术。 历史背景 互联网的起源可以追溯到20世纪60年代的ARPANET项目&#xff0c;作为研究机构之间的通信网络。最初的网页浏览器由Tim Berners-Lee于1990…

【工程测试技术】第3章 测试装置的基本特性,静态特性和动态特性,一阶二阶系统的特性,负载效应,抗干扰性

目录 3.1 概述 1测量装置的静态特性 2.标准和标准传递 3.测量装置的动态特性 4.测量装置的负载特性 5.测量装置的抗干扰性 1.线性度 2.灵敏度 3.回程误差 4.分辨力 5.零点漂移和灵敏度漂移 3.3.1 动态特性的数学描述 1.传递函数 2.频率响应函数 3.脉冲响应函数 …

jmeter进行性能测试实践

设置场景接口 一、通过抓取一个场景的接口&#xff08;抓包&#xff09; 自己抓取需要的接口&#xff0c;进行依赖 流程&#xff1a;1.在网页上F12抓取登录页面和登出页面的URL。2.在jemeter设置线程组&#xff0c;添加http请求输入URL等。3.查看结果数 二、通过boday录制 …

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-29

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-29 在这一期中&#xff0c;我们对大语言模型在软件开发中的跨学科应用的几个工作做简要的介绍。相关内容涵盖软件测试时的问题报告&#xff0c;问题分类&#xff0c;测试生成&#xff0c;和软件测试中的AI应用: …

【宝藏篇】加密软件有哪些?10款好用的加密软件推荐!

小明&#xff1a;嘿&#xff0c;小华&#xff0c;你知道有哪些好用的加密软件吗&#xff1f;我最近需要保护一些敏感数据。 小华&#xff1a;当然&#xff0c;小明&#xff01;现在市场上有很多优秀的加密软件&#xff0c;可以帮助你保护数据安全。我正好有10款宝藏级的加密软件…

【RocketMQ】RocketMQ应用难点

&#x1f3af; 导读&#xff1a;本文探讨了RocketMQ中消息重复消费的问题及其解决方案&#xff0c;尤其是在CLUSTERING模式下的扩容影响。文章分析了重复消费的原因&#xff0c;如广播模式、负载均衡模式下的多consumerGroup消费、消费者组内的动态变化及网络延迟等&#xff0c…

基于单片机的催眠电路控制系统

** 文章目录 前言一 概要功能设计设计思路 软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主…

动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络

3.1 线性回归 线性回归是对n维输入的加权&#xff0c;外加偏差 线性回归可以看作是单层神经网络 回归问题中最常用的损失函数是平方误差函数。 平方误差可以定义为以下公式&#xff1a; 常数1/2不会带来本质的差别&#xff0c;但这样在形式上稍微简单一些 &#xff08;因为当…

【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧

文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数&#xff1f;1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例&#xff1a;静态数组的实现 第二章: 模板的特化2.1 什么是模板特化&#xff1f;2.1.1 模板…

YOLO11关键改进与网络结构图

目录 前言&#xff1a;一、YOLO11的优势二、YOLO11网络结构图三、C3k2作用分析四、总结 前言&#xff1a; 对于一个科研人来说&#xff0c;发表论文水平的高低和你所掌握的信息差有着极大的关系&#xff0c;所以趁着YOLO11刚刚发布&#xff0c;趁热了解&#xff0c;先人一步对…

与我免费ai书童拆解《坚持》创作历程

插科打诨的海侃胡闹&#xff0c;调侃舒展《坚持》诗创的灵魂盛宴之旅。 (笔记模板由python脚本于2024年09月30日 19:11:42创建&#xff0c;本篇笔记适合喜欢python和诗歌的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#x…

如何让ollama本地模型使用code-interpreter(代码解释器)?

代码解释器通常都需要在GPU的环境下使用原生的模型通过transformer来实现&#xff0c;且本身还需要模型本身支持&#xff0c;ollama本地蒸馏过的模型占用的资源比较小&#xff0c;也方便本地使用&#xff0c;但是如果想用这些模型的代码解释器&#xff0c;即让大模型写程序并执…

小巧机身,但强劲动力实现千元级净须,未野迷你剃须刀测评

剃须刀是很多朋友每天都要用的工具&#xff0c;在选择上非常丰富&#xff0c;就便捷性和可靠性来说&#xff0c;电动剃须刀还是更方便一些。以前多数人用的都是飞利浦等传统品牌。近几年国产剃须刀也开始崛起&#xff0c;但是也存在很多令人不够满意的产品&#xff0c;比如说&a…

Redis入门第三步:Redis事务处理

欢迎继续跟随《Redis新手指南&#xff1a;从入门到精通》专栏的步伐&#xff01;在本文中&#xff0c;我们将探讨Redis的事务处理机制。了解如何使用事务来保证一系列操作的原子性和一致性&#xff0c;这对于构建可靠的应用程序至关重要 1 什么是Redis事务&#x1f340; ​ R…

高效学习工作SMART原则

S代表Specific&#xff08;明确具体的&#xff09;&#xff0c;意味着你需要清晰地定义你的目标&#xff0c;并确保它是具体而明确的。例如&#xff0c;如果你的目标是“提高销售”&#xff0c;那么这个目标就不是足够具体。更好的表述可能是&#xff1a;“在接下来的三个月内&…

【Python报错已解决】 ModuleNotFoundError: No module named ‘lime‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

828华为云征文 | 利用FIO工具测试Flexus云服务器X实例存储性能

目录 一、Flexus云服务器X实例概要 1.1 Flexus云服务器X实例摘要 1.2 产品特点 1.3 存储方面性能 1.4 测评服务器规格 二、FIO工具 2.1 安装部署FIO 2.2 主要性能指标概要 三、进行压测 3.1 测试全盘随机读IO延迟 3.2 测试全盘随机写IO延迟 3.3 测试随机读IOPS 3.4…

《后端程序猿 · Spring事务失效场景》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…