华为 · 队列 · 算法编程题
华为 队列 n ≤ 101 时限 1 秒 / 256 MB

题目描述

小红管理一个有 m 个窗口的取餐区。初始有 n 位顾客按编号 0 到 n-1 排队,每位顾客需要领取若干份餐品。每个窗口每秒服务队首的一位顾客并交付一份;若顾客仍有需求,他会排到队尾,否则离开。
每秒开始时,按窗口编号从小到大把队首顾客分给空闲窗口。由于一次服务恰好一秒,同一秒服务结束后,仍有需求的顾客也按窗口编号从小到大重新入队。求编号 k 的顾客完成领取的时刻。

输入输出

输入描述
第一行输入 n 个正整数表示每位顾客的需求量,第二行输入 k ,第三行输入 m 。
保证 1≤ n≤101 ,每份需求在 [1,100] , 0≤ k<n , 1≤ m≤10 。
输出描述
输出目标顾客完成领取所需的秒数。

样例共 2 组

样例 1 · 目标顾客在第 3 秒完成第二次服务。
输入
2 1 2
2
2
输出
3
样例 2 · 按队列轮转模拟,编号 2 的顾客在第 4 秒完成。
输入
5 3 3 1 4
2
3
输出
4

算法解析依据一般

考点:队列

数据规模 n ≤ 101 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 101,m ≤ 10
  • 复杂度门槛:允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:队列

先进先出的结构,用于模拟排队过程或配合 BFS/单调队列。

思路框架(队列 通法 · 非本题专属)

  1. 用双端队列 deque 实现,避免 list.pop(0) 的 O(n) 开销。
  2. 单调队列可在滑动窗口中 O(n) 求最大/最小值。
  3. 模拟类题目按时间顺序推进,注意同一时刻多个事件的先后。

实现要点:from collections import deque;popleft() 是 O(1)。

复杂度:时间 O(n) | 空间 O(n)

该范式的通法易错点

  • 用 list.pop(0) 造成 O(n²)。
  • 忘处理队列为空的情况。

对照本题

  • 数据规模 n ≤ 101,允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 2 1 2 / 2 / 2 → 输出 3

目标顾客在第 3 秒完成第二次服务。

样例 2:输入 5 3 3 1 4 / 2 / 3 → 输出 4

按队列轮转模拟,编号 2 的顾客在第 4 秒完成。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年-华为-06月24号开发岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解