问题描述:
我们把符合下列属性的数组A
称作山脉:
A.length >= 3
存在0 < i < A.length - 1
使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
给定一个确定为山脉的数组,返回任何满足A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
的i
的值。
示例 1:
输入:[0,1,0]
输出:1
示例 2:
输入:[0,2,1,0]
输出:1
提示:
3 <= A.length <= 10000
0 <= A[i] <= 10^6
A
是如上定义的山脉
问题分析:
最近看图像看的脑壳疼,刷道题缓冲一下,结果发现和LeetCode:162. Find Peak Element 解决方法一样,或者说,比它更简单,题目分析可以参考LeetCode:162,即可,二分法处理,这次用递归实现。
Python3实现:
# @Time :2018/11/01
# 二分查找 - 递归实现
class Solution:
def peakIndexInMountainArray(self, A):
if len(A) == 1: return 0 # 设置递归出口
if len(A) == 2:
if A[0] > A[1]: return 0
return 1
mid = len(A) // 2
if A[mid-1] > A[mid]: # 左递归
num = self.peakIndexInMountainArray(A[0:mid])
return num
elif A[mid+1] > A[mid]: # 右递归
num = self.peakIndexInMountainArray(A[mid+1:])
return num + 1 + mid
else: # 其他情况
return mid
if __name__ == '__main__':
solu = Solution()
A = [0, 2, 1, 0, 0]
print(solu.peakIndexInMountainArray(A))
声明: 总结学习,有问题或不妥之处,可以批评指正哦。
题目链接:leetcode-cn.com/problems/peak-index-in-a-mountain-array/