挑战被描述为:有一个长度为N的数组A带有整数,在这个数组中,我们希望找到具有最大差异的一对元素的第一个元素,例如,给定A= 1, 2,5,6,第一个元素是2,或者A1,因为5-2=3。
更正式地说,对的第一个元素是P,第二个元素是Q和0
我的快速解决方案得分很低:
def solution(A):
candidate = 0
saved_diff = 0
for elems in range(0, len(A)-1):
if A[elems] < A[elems+1]:
diff = A[elems+1] - A[elems]
if diff > saved_diff:
candidate = elems
saved_diff = diff
return candidate
我很好奇如何才能改进这一点?我是否应该考虑找出所有可能存在相同差异的配对?计算效率低吗?我不是在报道一些特殊的边缘案件吗?
发布于 2022-07-06 16:07:46
如果列表是无序的,我相信你找到了最好的解决方案,因为你必须检查每个数字及其O(n)。
在我看来,唯一没有必要的是if A[elems] < A[elems+1]:。
如果列表是有序的,您必须从右到左检查和:if L[x]-L[X-1] > L[X-2] (在其中X in range(len(L)[::-1]),您可以停止搜索,因为您不可能找到更大的号码。
(如果您有负数,逻辑是相同的,但您必须稍微更改检查)
也许还有更好的优化,但我的数学不是那么好。
很酷的问题,这让我想,谢谢
https://stackoverflow.com/questions/72886569
复制相似问题