最小的调整次数-od-python

最小调整顺序次数、特异性双端队列 逻辑分析

题目描述

有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但是只能从头部移出数据.小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添加数据(可能从头部添加、也可能从尾部添加),依次添加1到n;n个指令是移出数据

现在要求移除数据的顺序为1到n.

为了满足最后输出的要求,小A可以在任何时候调整队列中数据的顺序.

请问小A最少需要调整几次才能够满足移除数据的顺序正好是1到n;

输入描述

第一行一个数据n,表示数据的范围。

接下来的2n行,其中有n行为添加数据,指令为:

"head addx”表示从头部添加数据X
"tail addx”表示从尾部添加数据X,
另外n行为移出数据指令,指令为:“remove”的形式,表示移出1个数据1≤n≤3*10^5

所有的数据均合法

输出描述

一个整数,表示 小 A 要调整的最小次数

`def min_adjustment(instructions):
queue = []
adjustments = 0
target = 1

for instruction in instructions:
    if instruction.startswith("head"):
        _, data = instruction.split()
        queue.insert(0, int(data))
    elif instruction.startswith("tail"):
        _, data = instruction.split()
        queue.append(int(data))
    elif instruction == "remove":
        print(queue)
        if queue[0] != target: 
            adjustments += 1 # 不是按照顺序输出的,需要排序下,只是说操作,就排序就可以
            queue.sort()
        target += 1  # 记录当前list坐标 12345
        queue.pop(0)  # 出队


return adjustments

输入是12345 这样输入, 输出也要是12345,如果输出不是顺序的,就需要sort排序下

n = int(input()) # 读取输入
instructions = [input() for _ in range(2 * n)]
result = min_adjustment(instructions)
print(result)
`

posted on 2024-02-01 13:44  nomorecloudays  阅读(92)  评论(0编辑  收藏  举报

导航