Python练习题,功能已经实现了,测试30步,但是测试到21步就超时(超过2秒)需要降低时间复杂度

问题遇到的现象和发生背景

题目是纯英文的,就不粘贴了。大致意思是:
输入
3 (输入的个数)
1 1 (1:1,也就是1)
3 4 (3:4,也就是3,4)
6 9 (6:9,也就是6,7,8,9)
输出
1 1 (1、1出现的次数)
3 1 (3、3出现的次数)
4 1 ……
6 1
7 1
8 1
9 1
输入
5
1 10
2 9
3 8
4 7
5 5
输出
1 1
2 2
3 3
4 4
5 5
6 4
7 4
8 3
9 2
10 1

问题相关代码,请勿粘贴截图
from collections import Counter

len_as = input()
len_a = int(len_as)
all_data = []
arr_b = []
for _ in range(len_a):
    str_b = input()
    arr_b = str_b.split(' ')
    for i in range(int(arr_b[0]), int(arr_b[1]) + 1):
        if int(arr_b[0]) == int(arr_b[1]):
            all_data.append(int(arr_b[0]))
            break
        all_data.append(i)
nummap = Counter(all_data)
# print(nummap)
uniq_data = list(set(all_data))
uniq_data.sort()
for d in uniq_data:
    print("%s %s" % (d, nummap.get(d)))
运行结果及报错内容

测试用的哪些数字我无法查看

img

我的解答思路和尝试过的方法
我想要达到的结果

所有时间降低到2秒以下

你尝试一下将时间复杂度降下来试试,不调用第三方库操作,双重循环改为单循环

len_as = input()
str_b = []
nummap = {}
for i in range(int(len_as)):
    str_b.append(input().split(' '))
for i in str_b:
    for j in range(int(i[0]),int(i[1])+1):
        if j in nummap:
            nummap[j] += 1
        else:
            nummap[j] = 1
nummap=sorted(nummap.items(),key=lambda x:x[0])
for k,v in nummap:
    print(f"{k} {v}")

已完成,望采纳

len_as = input()
len_a = int(len_as)
summap = {}
for i in range(len_a):
    str_b = input()
    arr_b = str_b.split(' ')
    for i in range(int(arr_b[0]), int(arr_b[1]) + 1):
        if i in summap.keys():
            summap[i] += 1
        else:
            summap[i] = 1

summap2 = sorted(summap.keys())

for i in summap2:
    print("%s %s" %(i, summap.get(i)))

len_as = input(">>>")
len_a = int(len_as)
all_data = []
arr_b = []
nummap = {}
for _ in range(len_a):
    str_b = input(">>>")
    arr_b = str_b.split(' ')
    for i in range(int(arr_b[0]), int(arr_b[1]) + 1):
        nummap[i] = nummap.get(i, 0) + 1

uniq_data = sorted(nummap.items(), key=lambda x: x[0])
for k,v in uniq_data:
    print("%s %s" % (k, v))