首页 > 试题广场 >

牛牛排队

[编程题]牛牛排队
  • 热度指数:1511 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
下课了,牛牛要去食堂吃饭,他们学校的食堂有很多个门,而且整个建筑物是圆形的。只不过要去吃饭的人很多,在里面吃饭的人也很多,所以大家都在门口外面排队等待吃饭。
所以牛牛采取了这样的一个策略:刚开始时,牛牛在第一个门口,如果这个门口有人在排队,那么他选择花费1分钟时间走到下一个门口,如果没有人的话,牛牛就可以直接进去吃饭啦。食堂的每一个门,每1分钟排队的人数都会减少一个。
现在给你门的数量n,和每个门外排队的人的数量,如果按照牛牛的策略,那么牛牛最终会在哪个门进去吃饭呢?请你进行编程求解,返回牛牛最终是从第几个门进入食堂吃饭的。
示例1

输入

4,[2,3,2,0]

输出

3

说明

按照牛牛的策略,每个门口外的排队人数随着时间的变化的结果为[2,3,2,0]→[1,2,1,0]→[0,1,0,0],当牛牛走到第3个门时,刚好没有人排队,所以牛牛最后可以从第3个门进去。 
示例2

输入

2,[10,10]

输出

1

说明

按照牛牛的策略,每个门口外的排队人数随着时间的变化的结果为[10,10]→[9,9]→[8,8]→[7,7]→[6,6]→[5,5]→[4,4]→[3,3]→[2,2]→[1,1]→[0,0]
,当牛牛走到第五圈,回到第1个门时,刚好没有人排队,所以牛牛最后可以从第1个门进去。

备注:





class Solution:
    def nowcoderQueue(self , n , a ):
        # write code here
        cnt = []
        for i in range(len(a)):
            cnt.append((a[i] - i) // n if (a[i] - i) % n == 0 else (a[i] - i) // n + 1)
        cur_l = float('inf')

        ans = -1
        for i in range(len(cnt)):
            if cnt[i] < cur_l:
                cur_l = cnt[i]
                ans = i + 1
        return ans

发表于 2021-08-27 12:55:04 回复(0)

问题信息

难度:
1条回答 3621浏览

热门推荐

通过挑战的用户

查看代码
牛牛排队