[Java][BinarySearch][LeetCode] Peak Index In A Mountain Array #852
Let’s call an array arr
a mountain if the following properties hold:
arr.length >= 3
- There exists some
i
with0 < i < arr.length - 1
such that: arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]
Given an integer array arr
that is guaranteed to be a mountain, return any i
such that arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
.
Example 1:
Input: arr = [0,1,0]
Output: 1
Binary Search,
If arr[mid]>arr[mid-1] and arr[mid]>arr[mid+1], it’s mean mid is arrive peak. More over, maybe is increase or decrease. Then we need to define what is increase and decrease. If arr[mid]>arr[mid-1], it’s mean arr is increasing, I will move left border to mid. Else, it’s mean arr is decreasing. I will move right border to mid+1.
如果用二分查找的方式,當mid>mid-1並且mid>mid+1,則表示已經到了峰值,除此之外,都可能是正在上爬或是下滑。
接著再分成,當mid大於mid-1的值,則表示還在往上爬,那就可以把左邊界移到mid的位置,否則就表示mid小於mid-1的值,則表示在往下走,那就可以把右邊界移到mid+1的位置。