首页 > 试题广场 >

那些插队的人

[编程题]那些插队的人
  • 热度指数:3991 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
你有一个长度为 n 的队伍,从左到右依次为 1~n,有 m 次插队行为,用数组 cutIn 进行表示,cutIn 的元素依次代表想要插队的人的编号,每次插队,这个人都会直接移动到队伍的最前方。你需要返回一个整数,代表这 m 次插队行为之后,有多少个人已经不在原来队伍的位置了。
示例1

输入

3,[3, 2, 3]

输出

2

说明

初始队伍为 [1, 2, 3]
3 开始插队 [3, 1, 2]
2 开始插队 [2, 3, 1]
3 开始插队 [3, 2, 1]
所以2还在原来的尾置,3和1两个人已经不在原来的位置了。
示例2

输入

3,[]

输出

0

说明

没有人进行插队,所有人都在自己原来的位置上。

备注:
对于所有数据,保证 , ,且 
为什么我只能评论25个字以内
class Solution:
    def countDislocation(self , n , cutIn ):
        if len(cutIn) == 0:
            return 0
        nn = max(cutIn)
        cutIn.reverse()
        cut = sorted(set(cutIn), key=cutIn.index)
        sums = 0
        for index, value in enumerate(cut):
            if index + 1 == value:
                sums += 1
        return nn - sums


发表于 2020-05-14 03:07:44 回复(0)