找数组的波谷

算法的分析来自与‘待字闺中’微信公众平台

利用python语言实现(刚学习python,练习一下)。

第一种方法:

__author__ = 'ledao'

arr = [9, 7, 6, 2, 1, 3, 7]

def vally(arr):
    arrLength = len(arr)
    if arr[0] < arr[1] or arr[arrLength-1] < arr[arrLength-2]:
        print arr, 'doesn\'t match the vally array!'
        return -1
    for i in xrange(1, arrLength-2):
        if arr[i-1] >= arr[i] and arr[i] <= arr[i+1]:
            return i
    print 'error occurs!'
    return -1

print vally(arr)

 第二种方法:

__author__ = 'ledao '

arr = [9, 7, 6, 2, 1, 3, 7]

def vally(arr, left, right):
    if arr[left] < arr[left+1] or arr[right] < arr[right-1]:
        print arr, 'doesn\'t match the vally array!'
        return -1
    for i in xrange(0, len(arr)):
        mid = (left + right) / 2
        if arr[mid-1] >= arr[mid] and arr[mid+1] >= arr[mid]:
            return mid
        if arr[mid-1] <= arr[mid] and arr[mid] < arr[mid+1]:
            right = mid
            continue
        if arr[mid+1] <= arr[mid] and arr[mid] < arr[mid-1]:
            left = mid
            continue
        if arr[mid-1] < arr[mid] and arr[mid+1] < arr[mid]:
            left = mid # or right = mid
            continue
    print 'error occurs!'
    return -1

print vally(arr, 0, len(arr)-1)

 

posted @ 2014-03-25 19:22  ledao  阅读(350)  评论(0编辑  收藏  举报