大佬们求助,最后一个数据点超时怎么办
查看原帖
大佬们求助,最后一个数据点超时怎么办
716489
fei_fei_keai楼主2023/4/4 15:51
import sys
input = sys.stdin.readline
n, m = list(map(int, input().split()))
list_num = [0] + list(map(int, input().split()))
list_bool = [0 for i in range(m + 1)]  # 标记数组
list_con = [0 for a in range(m+1)] # 统计次数
len_list = 20000000  # 判断每组符合条件的数组长度
num_l = 10 ; num_r = 10
l = 1 ; r = 2
list_bool[list_num[1]] = 1
list_bool[list_num[2]] = 1
list_con[list_num[1]] = 1

for i in range(2, n + 1):
    r = i
    list_bool[list_num[r]] = 1  # 一直向右拓宽边界
    list_con[list_num[r]] += 1
    # 如果每一位都在这个范围内
    if sum(list_bool) == m:  # 一旦区域内的数据符合要求即收缩左边界
        con = r - l + 1
        while True:
            if list_con[list_num[l]] > 1 :
                list_con[list_num[l]] -= 1
                l += 1
                con -= 1
            else:
                break
        if con < len_list:
            len_list = con
            num_l = l ; num_r = r
        list_bool[list_num[l]] = 0
        list_con[list_num[l]] = 0
        l += 1
print(num_l, num_r)
2023/4/4 15:51
加载中...