def solve(numbers, N):
"""
输入N个整数序列,如果有连续子序列中包括序列中出现的所有数字,则输出最短的区间,区间个数以及最短区间位置,位置从1开始
eg:
input:
10 #整数个数
1 1 3 4 6 6 5 1 3 3 #整数序列
output:
6,3 #区间最短长度,区间个数
[2,7] [3,8] [4,9]
"""
if not numbers:
return
longth = 1000000
if len(numbers) == 1:
longth = 1
pair_lst = [1, 1]
return longth, len(pair_lst), pair_lst
num = set()
for i in numbers:
num.add(i) #统计序列中出现的数字
i = 0
while i < N:
lst = set() #遍历
j = i
while j < N:
lst.add(numbers[j])
if len(lst) != len(num): #符合连续有所有数字的判断
j += 1
else:
long = j - i + 1
if long < longth: #存在更小的区间则覆盖前面的
pair_lst = []
pair_lst.append([i + 1, j + 1])
longth = long #找到更短的区间,更新长度
elif long == longth: #长度相等的区间直接追加
pair_lst.append([i + 1, j + 1]) #保存最短区间的位置
break
i += 1
return longth, len(pair_lst), pair_lst
if __name__ == '__main__':
N = int(input())
numbers = []
for i in range(N):
numbers.append(int(input()))
long, num,pair_list = solve(numbers,N)
print(long," ",num)
for i in pair_list:
print(i,end= " ")
测试结果: