感觉题目有点歧义,子数组可以不连续,所以有重复数据也可以去重排序后计算
1、731 ms 4088K

def check(l):
    return len(l) == (l[-1] - l[0] + 1)

while True:
    try:
        n = int(input())
        l = list(map(int, input().split()))
        l = sorted(list(set(l)))
        maxL = 1
        n = len(l)
        for i in range(n-1):
            for j in range(i+1, n):
                if check(l[i:j+1]):
                    maxL = max(maxL, j-i+1)
                else:
                    break
        print(maxL)
    except EOFError:
        break

2、214 ms 3940K

while True:
    try:
        n = int(input())
        l = list(map(int, input().split()))
        l.sort()
        maxL = 1
        if n == 2 and l[1]-l[0] == 1:
            maxL = 2
        else:
            for i in range(n-2):
                mi = l[i]
                ma = l[i+1]
                if mi == ma or ma - mi > 1:
                    continue
                for j in range(i+2, n):
                    if ma + 1 == l[j]:
                        ma = l[j]
                        maxL = max(maxL, j-i+1)
                    else:
                        break
        print(maxL)
    except EOFError:
        break

3、31 ms 4216K

while True:
    try:
        n = int(input())
        l = list(map(int, input().split()))
        l = sorted(list(set(l)))
        tmp = maxL = 1
        n = len(l)
        for i in range(1, n):
            if l[i] - l[i-1] == 1:
                tmp += 1
            else:
                maxL = max(maxL, tmp)
                tmp = 1
        print(max(maxL, tmp))
    except EOFError:
        break