【发布时间】:2015-07-17 01:38:27
【问题描述】:
我试图解决一个编程挑战,而我编写的程序正确地解决了这个问题的小测试数据。但是当他们针对更大的数据集运行它时,我的程序在某些情况下会超时。我主要是一个自学成才的程序员,如果有比我的逻辑更好的算法/实现,你们能告诉我。谢谢。
问题
给定一个整数数组a,返回任意整数的最大差值 一对数字,使得该对中较大的整数出现在 比较小的整数更高的索引(在数组中)。
Return -1如果你 找不到满足此条件的对。
我的 Python 函数
def maxDifference( a):
diff=0
find=0
leng = len(a)
for x in range(0,leng-1):
for y in range(x+1,leng):
if(a[y]-a[x]>=diff):
diff=a[y]-a[x]
find=1
if find==1:
return diff
else:
return -1
约束:
1 <= N <= 1,000,000
-1,000,000 <= a[i] <= 1,000,000 i belongs to [1,N]
示例输入:
Array { 2,3,10,2,4,8,1}
样本输出:
8
【问题讨论】:
-
有嵌套的 for 循环,所以它是
O(n^2),任何在线法官都不会轻易接受。 -
这里有一个提示:你可以在线性时间内找到每个索引之前的最大值。您可以在线性时间内找到每个索引之后的最小值。一旦你有了这两个列表,你怎么能避免内部循环,使你的整个算法线性时间而不是二次?
-
同时,您声称此代码提供了正确的输出,除了对一些大型数据集超时......但它实际上引发了
SyntaxError,如果您修复它,它会为您的样本返回 -1输入,而不是 8。 -
嵌套循环,其中两个循环都遍历所有 N 值,本质上意味着二次时间。当二次时间是不可避免的(或者对于问题域来说足够好),嵌套循环通常是最易读的写东西的方式(尽管并非总是如此;有时
for x, y in product(…)或使用 NumPy 数组或类似的更好......)。但是当存在线性或对数线性解决方案时,您可能必须采用不同的结构。 -
同时,您的固定版本仍然有相同的 SyntaxError;我没有检查你是否修复了其他任何东西。
标签: python arrays python-2.7