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

数据结构 (队列略版)

模拟队列

const int N=10010;

int q[N];

int fro=0,tail=0;

void push(int val){

        q[tail++]=val;

}

void pop(){

        if(fro==tail)return;

        fro++;

}

int  front(){

        if(fro==tail)return -1;

        return q[fro];

}

bool empty(){        

        return tail==front;

}

int size (){

        return tail-fro;

}

环形队列:

方案1:

加一个变量 count 保存队列元素个数
初始 front=0,rear=0,count=0;
队空 count==0
队满 count==m
队中元素个数 count
优点
队列每个空间都能用上
缺点
多了一个变量
入队、出队需要对 count 加减 1

方案2:
 

队尾后一个位置永远空着
初始 front=0,rear=0;
队空 front==rear
队满 (rear+1)%m==front
队中元素个数:(rear-front+m)%m
优点
不需要 count 变量
入出队也无需对 count 加减 1
缺点
浪费 1 个空间

题目;

1,模拟排队

有 n 个人前来排队买票,其中第 0 人站在队伍 最前方 ,第 (n - 1) 人站在队伍 最后方 。

给你一个下标从 0 开始的整数数组 tickets ,数组长度为 n ,其中第 i 人想要购买的票数为 tickets[i] 。

每个人买票都需要用掉 恰好 1 秒 。一个人 一次只能买一张票 ,如果需要购买更多票,他必须走到  队尾 重新排队(**瞬间 **发生,不计时间)。如果一个人没有剩下需要买的票,那他将会 离开 队伍。

返回位于位置 k(下标从 0 开始)的人完成买票需要的时间(以秒为单位)。

**示例 1:**输入:tickets = [2,3,2], k = 2 输出:6 解释: - 第一轮,队伍中的每个人都买到一张票,队伍变为 [1, 2, 1] 。 - 第二轮,队伍中的每个都又都买到一张票,队伍变为 [0, 1, 0] 。 位置 2 的人成功买到 2 张票,用掉 3 + 3 = 6 秒。

int timeRequiredToBuy(vector<int>& tickets, int k) {
        int n = tickets.size();
        int res = 0;
        for (int i = 0; i < n; ++i){
            // 遍历计算每个人所需时间
            if (i <= k){
                res += min(tickets[i], tickets[k]);
            }
            else{
                res += min(tickets[i], tickets[k] - 1);
            }
        }
        return res;
    }

http://www.kler.cn/a/448105.html

相关文章:

  • 成方金融科技后端部分笔试题 - 解析
  • 如何优雅的关闭GoWeb服务器
  • 基于LabVIEW的USRP信道测量开发
  • 【论文研读】U-DiTs:在U型扩散Transformer中引入下采样Token,以更低计算成本超越DiT-XL/2
  • 【系统】Windows11更新解决办法,一键暂停
  • Android详解——ConstraintLayout约束布局
  • TCP常见问题
  • 如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
  • [极客大挑战 2019]HardSQL 1
  • 豆包MarsCode:小T的密码变换规则
  • RLDP(快速链路检测)防环
  • Rust vs C: PNG解码器性能之争的启示
  • Apple Vision Pro 开发教程:通过 TestFlight 把开发的程序安装到其他的设备上测试
  • C++算法第十二天
  • 一起学Git【番外篇:如何在Git中新建文件】
  • OpenCV图像分割
  • UITableView实现通讯录效果
  • 【漏洞-Oracle】未设置口令复杂度校验、密码有效期
  • ELK系列-(六)Redis也能作为消息队列?(上)
  • 使用Python实现量子密钥分发:构建安全通信的未来
  • scala基础学习(数据类型)-字符串
  • Oracle筑基篇-调度算法-LRU的引入
  • 【MogDB】MogDB5.2.0重磅发布第十篇-支持PLSQL嵌套子程序
  • React:组件、状态与事件处理的完整指南
  • 软件测试之边界值分析法
  • 【分享-POI工具,Excel字段取值容错小工具】