首页 > 解决方案 > 为什么我在这 2 个代码上的 Codeforces 平台上出现运行时错误?

问题描述

这是我的提交链接:-针对以下问题:https ://codeforces.com/problemset/problem/1257/C https://codeforces.com/problemset/submission/1257/65506141

test=int(input())
for testing in range(test):
    n=int(input())
    t=[int(x) for x in input().split()]
    if n<=1:
        print(-1)
    else :
        l=[x for x in t if t.count(x)>1]
        l=[x for x in set(l)]
        pointer=[]
        for x in l:
            joker=True
            i=0
            while i<len(t):
                if t[i]==x and joker:
                    s=i
                    joker=False
                if t[i]==x and not joker and i!=s:
                    pointer.append(t[s:i+1])
                    joker=True
                    i-=1
                i+=1
        print(min(map(len,pointer)))

在此先感谢^^,我仍然没有从运行时错误中得到什么

标签: pythonpython-3.7

解决方案


我发现了它的主要原因,这主要是因为尝试或期望您需要避免异常,例如列表变空并在此之后为其他事情调用它。我刚刚修复了代码:

test=int(input())
for testing in range(test):
    n=int(input())
    t=[int(x) for x in input().split()]
    if n<=1 :
        print(-1)
        continue
    else :
        pointer=[[False,0] for i in range(max(max(t),len(t))+1)]
        first=True
        mini=-1
        for i in range(len(t)):
            if not pointer[t[i]][0]:
                pointer[t[i]][1]=i
                pointer[t[i]][0]=True
                continue
            if pointer[t[i]][0]:
                if first :
                    mini=i-pointer[t[i]][1]+1
                    first=False
                else:
                    a=i-pointer[t[i]][1]+1
                    if mini>a:
                        mini=a
            pointer[t[i]][1]=i
            pointer[t[i]][0]=True
            if mini==2:
                break
    print(mini)

推荐阅读