守望_sy 2021-11-22 01:54 采纳率: 63.2%
浏览 80
已结题

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秒以下

  • 写回答

3条回答 默认 最新

  • 辉煌仪奇 2021-11-22 09:52
    关注

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

    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}")
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 创建了问题 11月22日

悬赏问题

  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys