各位大佬,请教一下领扣的超出时间限制-python3-第 167 题-两数相加

2018-09-21 15:27:42 +08:00
 ddzzhen

小弟是个新手,只会写简单的代码实现结果,对于语法的复杂度没有太多概念,使用以下链接完成领扣第 167 题时,提交代码验证到最后一步 16/17,提示:超出时间限制,感觉可能是遍历列表太多次了,但是如何知道每一步的时间复杂度到底有多大呢?

https://leetcode-cn.com/playground/TThPBRka

7456 次点击
所在节点    Python
27 条回复
Raisu
2018-09-21 19:36:15 +08:00
我也是新手啊。。。自学转开发才半年,
Raisu
2018-09-21 19:54:01 +08:00
试了一下,用 set 过滤了一下也能通过。。。。不过有点取巧就是了。代码怎么带格式?
l = len(numbers)
a = target // 2
if a in numbers:
index = numbers.index(a)
if a in numbers[index + 1:]:
return [index+1, index + 2]
n = list(set(numbers))
for i in range(len(n)):
ans = target - n[i]
if ans in n:
index2 = numbers.index(ans)
index1 = numbers.index(n[i])
return sorted([index1 + 1, index2 + 1])
ddzzhen
2018-09-21 23:05:43 +08:00
@loryyang 多谢高手,确实学了 python 感觉效率是个瓶颈
ddzzhen
2018-09-21 23:06:15 +08:00
@Raisu 多谢,当时解题的时候考虑过这个,但是没有实施
vancoder
2018-09-22 02:14:11 +08:00
这不是 python 效率的问题,是你的解法时间复杂度的问题,建议学习一下如何分析算法时间复杂度
widewing
2018-09-22 08:39:32 +08:00
没搞错吧楼上的各位,哪个语言没有个内置的 sort?莫非你们都用汇编的?
cyrbuzz
2018-09-22 11:22:32 +08:00
代码里有 print,把 print 去掉吧...

in 这种语句尽量用 set 代替 list 吧。list 执行是 O(n) ,set 是 O (1)。

这个题应该是想让你用 O(n) 的解法来解,否则不会又出来一个标明 已排过序 的在用 未排过序 时的解法再解一次吧...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/491561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX