找数组的波谷
算法的分析来自与‘待字闺中’微信公众平台
利用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)