查找数组中的max元素,先按升序排序,然后按降序排序

时间:2015-09-06 14:18:54

标签: python arrays binary-search

我尝试了一个在线挑战,其中有一个问题如下:

  

您将获得一个数组,该数组首先增加然后开始减少。   例如:2 3 4 5 6 7 8 6 4 2 0 -2。   找到这些数组的最大元素。

以下是我使用二进制搜索的代码,它在O(log(n))中给出了正确的答案,但我不知道是否有更好的解决方案。 任何人都可以帮我吗?

a= map(int, raw_input().split())
def BS(lo,hi):
    mid = lo+ (hi-lo)/2
    if a[mid]>=a[mid+1]:
        if a[mid]>a[mid-1]:
            return mid
        else:
            return BS(lo,mid)
    else:
        return BS(mid,hi)

print a[BS(0,len(a)-1)]

3 个答案:

答案 0 :(得分:2)

优化变体 - 在大多数情况下速度提高两倍:

# ® Видул Николаев Петров
a = [2, 3, 4, 5, 6, 7, 8, 10, 12, 24, 48, 12, 6, 5, 0, -1]

def calc(a):
    if len(a) <= 2:
        return a[0] if a[0] > a[1]  else a[1]

    l2 = len(a) / 2

    if a[l2 + 1] <= a[l2] and a[l2] >= a[l2 - 1]:
        return a[l2]

    if a[l2] > a[l2 + 1]:
        return calc(a[:l2+1])
    else:
        return calc(a[l2:])

print calc(a) # 48

答案 1 :(得分:1)

我正在使用以下输入2 3 4 5 5 8尝试您的代码,答案应 8 ,但答案是 5 我发布了一个带有更多测试用例enter image description here

我认为你不能在未排序的数组上运行二进制搜索 该代码还为排序数组提供了大量异常列表

答案 2 :(得分:-1)

为什么不使用max()方法??

max(lst)将返回列表中的最大值