# 162. Find Peak Element (Medium)

https://leetcode.com/problems/find-peak-element/

A peak element is an element that is greater than its neighbors.

Given an input array `nums`, where `nums[i] ≠ nums[i+1]`, find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that `nums[-1] = nums[n] = -∞`.

Example 1:

```Input: nums = `[1,2,3,1]`
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.```

Example 2:

```Input: nums = `[`1,2,1,3,5,6,4]
Output: 1 or 5
Explanation: Your function can return either index number 1 where the peak element is 2,
or index number 5 where the peak element is 6.
```

Note:

Your solution should be in logarithmic complexity.

## Solutions

``````class Solution {
public int findPeakElement(int[] nums) {
if (nums.length == 1) return 0;
if (nums > nums)
return 0;
else if (nums[nums.length - 1] > nums[nums.length - 2])
return nums.length - 1;

int l = 0, h = nums.length - 1;
int ans = 0;
while (l <= h) {
int m = l + (h - l) / 2;
if (m - 1 >= 0 && m + 1 < nums.length) {
if (nums[m] > nums[m - 1] && nums[m] > nums[m + 1]) {
return m;
}
}
if (m - 1 >= 0 && nums[m - 1] > nums[m]) { //search left
h = m - 1;
} else {
ans = l; //mark this as the answer and search right
l = m + 1;
}
}
return ans;
}
}
``````