【发布时间】:2017-09-29 15:27:17
【问题描述】:
我刚刚开始使用竞争性编程,在编写了某些问题的解决方案后,我得到了 RUNTIME exceeded 的错误。
max( | a [ i ] - a [ j ] | + | i - j | )
a 是元素列表,i,j 是获取 max() 所需的索引strong> 以上表达式。
这是一个简短但完整的代码sn-p。
t = int(input()) # Number of test cases
for i in range(t):
n = int(input()) #size of list
a = list(map(int, str(input()).split())) # getting space separated input
res = []
for s in range(n): # These two loops are increasing the run-time
for d in range(n):
res.append(abs(a[s] - a[d]) + abs(s - d))
print(max(res))
Input File此链接可能会过期(希望有效)
- 1
- 1
- 0
C 语言排行榜的运行时间为 5 秒,Python 为 35 秒,而此代码需要 80 秒。 p>
它是一个在线法官,因此独立于机器。numpy 不可用。
请保持简单我是python新手。
感谢阅读。
【问题讨论】:
-
为什么不直接对数组进行排序并获取 largest 和 smallest 元素呢?这样,您的索引和值都会有最大的差异。您当前方法的时间复杂度至少
O(n^2),假设append摊销O(1)。排序方法为O(n log n)。 -
您还需要考虑索引(在排序之前),但是是的,这些方面的东西是您真正节省时间的方式。
-
@meowgoesthedog 感谢您将排序纳入图片。一个问题我如何知道何时使用编程语言或 DS 或 ALGO 的哪些功能?它来自经验吗?
标签: python algorithm optimization data-structures