Kickstart回合C 2020倒计时问题-查找连续子数组的数量

时间:2020-09-17 05:05:24

标签: python arrays

编辑-输出的冒号前没有空格。但是,在更改了该错误之后,它表示运行时错误,而不是错误的答案。甚至样本输入测试也成功运行。可能有什么问题吗?

问题 Avery具有N个正整数的数组。数组的第i个整数是Ai。

如果连续子数组的长度为m,并且按该顺序包含整数m,m-1,m-2,...,2、1,则该数组为m-countdown。例如,[3,2,1]是3倒数。

您能帮助Avery计算她数组中K倒数的次数吗?

输入 输入的第一行给出测试用例的数量,T。每个测试用例均以包含整数N和K的行开头。第二行包含N个整数。第i个整数是Ai。

输出 对于每个测试用例,输出一行包含Case #x:y的行,其中x是测试用例编号(从1开始),y是她数组中K倒数的数量。

限制 时间限制:每个测试集20秒。 内存限制:1GB。 1≤T≤100。 2≤K≤N。 对于所有i,1≤Ai≤2×105。

测试集1 2≤N≤1000。

测试集2 最多10个测试用例为2≤N≤2×105。
对于其余情况,2≤N≤1000。

样品

输入

3
12 3
1 2 3 7 9 3 2 1 8 3 2 1
4 2
101 100 99 98
9 6
100 7 6 5 4 3 2 1 100

输出

案例1:2
情况2:0
情况3:1

T = int(input())

res = []
for i in range(T):
    N, K = map(int, input().split(' '))
    ai = list(map(int, input().split(' ')))
    y=0
    count=0
    for m in range(len(ai)):
        count=0
        if(ai[m]==K):
            if(len(ai)>=m+K-1):
                    for j in reversed(range(1, K)):
                        if(ai[m+K-j]==j):
                            count=count+1
                    if(count==K-1):
                        y=y+1
            else:
                break
        else:
            continue
    res.append("Case #"+str(i+1)+" : "+str(y))
for g in range(len(res)):
    print(res[g])

1 个答案:

答案 0 :(得分:0)

您可以使用两指针方法,例如采用两个变量ij并都用0初始化

如果满足要求的条件,即保持i固定增量j

while(a[k+1]-a[k]==1):
    j++
    k++

只要条件失败,请计算j-i。如果完全j-i==m,则增加您的计数器,说cnt,然后放入i=j,重复直到数组结尾