```
as said in the question, nums[-1] and nums[n] can be float("inf"),
and we should try to use binary search to reach O(logN)
the problem becomes how can we divide the problem when we use binary search,
the key is to make the sub problem in half size and make sure we can get one peek in sub problem
we found that in range(i....j)
if nums[i-1]<nums[i] and nums[j]>nums[j], we can make sure there is a peek in (i...j)
because if no peek, (i-1...j+1) should be ascending or descending, which is impossible
based on above , when we get mid,
if nums[mid]<nums[mid+1],
sub problem becomes (mid+1....r)
else
sub problem becomes (l....mid)
```

```
class Solution(object):
def findPeakElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
l, r = 0, len(nums) - 1
while l <= r:
if l == r:
return l
else:
mid = (l + r) / 2
if nums[mid] < nums[mid + 1]:
l = mid + 1
else:
r = mid
```