如何为简单的 if-else-while 程序减少 运行 时间

how to reduce run tiime for a simple if-else-while program

我刚开始学习 python,所以我在 codechef 练习一些代码 我正在尝试的问题之一是 https://www.codechef.com/problems/CHEFEZQ

"大厨发布了一篇博客post,现在收到了很多关于它的查询。在第i天,他收到了Qi个查询。但是大厨一天最多可以回答k个查询。

Chef 总是在任何给定的一天回答他可以回答的最大数量的问题(但是请注意,这不能超过 k 个)。剩余问题(如有)将结转至第二天。

幸运的是,n天后,查询停止了。大厨想知道他有空的第一天,也就是他回答的问题少于k的第一天。

输入: 第一行将包含 T,测试用例的数量。然后是测试用例。 每个测试用例的第一行包含两个 space 分隔的整数 n 和 k。 每个测试用例的第二行包含 n space 个分隔的整数,即 Q1,Q2,...Qn。 输出: 对于每个测试用例,在厨师回答少于 k 个问题的第一天在一行中输出。

约束条件 1≤T≤105 1≤所有测试用例的n之和≤105 1≤k≤108 0≤Qi≤108

所以我这样写我的代码:

i=0

while (i<T):
    nk=input()
    q=[int(a) for a in input().split(" ")]
    n_k=nk.split(" ")
    n=int(n_k[0])
    k=int(n_k[1])
    j=0
    l=0
    while j<n:
        l=l+q[j]-k
        if l<0:
            print(j+1)
            break
        j+=1
    while j>=n:
        l=l-k
        if l<0:
            print(j+1)
            break
        j+=1
    i+=1

总时间限制是 1 秒,但我的代码需要 5 秒 我找不到任何减少时间的方法,有人可以帮我吗 提前谢谢你

如果您已经调用了 print,那么第二个 while j >= n 是不必要的,如果您还没有调用 print(j + l//k + 1) 或类似的东西(请使用更长且更有意义的变量名称! ) 会直接计算答案。

while 循环 j>=n 设计不当:循环条件永远不会变为 False,因为 j 总是增加而 n 永远不会减少。通常,这样的循环可能永远不会终止。在这种情况下,它可能会随着 l 的减小而终止(希望 k 始终为正),这最终会导致中断。但是应该始终构造一个循环,使条件最终变为 False。

在条件 j<n 的循环结束时,新条件 j>=n 仍然成立并且永远成立(只要 j 和 n 未被操纵)。因此新条件可能是while l>=0。 (我没有特别检查这是否解决了实际任务,但是,除了改进样式之外,它至少会简化给定的代码。它至少在每次迭代中减少了一次检查。)