C++ 中根据给定条件恢复被打乱的队列

2025 年 5 月 22 日 | 阅读 4 分钟

在本文中,我们将讨论如何在 C++ 中根据给定条件以及其算法和实现来恢复打乱的队列。

问题陈述

考虑两个数组A[]B[],以及 N 个人在排队。个人姓名由数组 A[] 表示,站在其前面且比该个人高的人数由数组 B[] 表示。现在,队伍被重新排列。任务是打印队列的初始顺序,同时遵循上述属性。

算法

步骤 1: 创建一个名为 "pairs[]" 的数组,用于存储个人姓名及其分配号码的对。

步骤 2: 遍历 persons[] 和 nums[] 数组,将它们的值组合到 pairs 数组中。

步骤 3: 为了对 pairs[] 数组进行排序,使用 sort() 函数。

步骤 4: 此外,在此步骤中,我们定义“res”列表并开始遍历 pairs[] 数组。

步骤 5: 如果 p - pairs[p].first 小于 0,则打印 -1,因为无法获得原始队列。

步骤 6: 如果不是,则更新 res[p] 中的 temp 字段。

步骤 7: 当前,我们必须修改 res[q] 集合中个人的位置。输入 'res' 数组并开始探索它。

步骤 8: 使用嵌套循环从索引 0 到索引 q 遍历 res 数组。

步骤 9: 如果 res[q] 大于或等于 res[p],则将 res[q] 增加 1。

步骤 10: 打印出每个人的位置。

输入: N = 4, A[] = {'a', 'b', 'c', 'd'}, B[] = {0, 2, 0, 0}

输出

a 1

c 3

d 4

b 2

观察输出队列以及生成它们的高度,很明显:

  1. 索引为 0 的人在 a 的前面,因为他是队伍中的第一个人。因此,在输入中,与 0 相关联。
  2. 只有 a 站在 c 的前面,但 a 比 c 矮。因此,在输入中,c 与 0 相关联。
  3. 尽管 c 和 a 都在 d 的前面,但 d 比他们都高。因此,在输入中,d 与 0 相关联。
  4. d、c 和 a 都在 b 的前面。但是,只有 d 和 c 比 b 高。因此,在输入中,b 与 2 相关联。

示例 1

让我们举一个例子来说明如何在 C++ 中根据给定条件恢复打乱的队列。

输出

J 1
h 3
n 4
o 2   

示例 2

让我们举一个例子来说明如何在 C++ 中根据给定条件恢复打乱的队列。

输出

The original queue is:
Harsha 1
Ram 2
sham 4
vardhan 3