> For the complete documentation index, see [llms.txt](https://liuyang89116.gitbook.io/my-leetcode-book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://liuyang89116.gitbook.io/my-leetcode-book/chapter_3_binary_search/problem_162_find_peak_element.md).

# Problem 162: Find Peak Element

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

## 思路

* 因为求的是任意一个peak，所以我们可以考虑使用二分法

  ![](https://1241747088-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lpv9LvBSlFaukf_ALqh%2F-Lpv9NPw3Ji1X5Vk8CES%2F-Lpv9up9gQdSJOE1qt6s%2FfindPeak_01.jpg?generation=1569729531949598\&alt=media)

![](https://1241747088-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lpv9LvBSlFaukf_ALqh%2F-Lpv9NPw3Ji1X5Vk8CES%2F-Lpv9upB3EmOPpQScFj7%2FfindPeak_02.jpg?generation=1569729531791187\&alt=media)

* 无非就是三种情况：第一种就是，`nums[mid] < nums[mid - 1]`，说明peak在左边；第二种就是`nums[mid] < nums[mid + 1]`，说明peak在右边；最后一种情况，就是`nums[mid]`比他俩都高，那他本身就是一个peak！

```java
public class Solution {
    public int findPeakElement(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int start = 0;
        int end = nums.length - 1;
        int mid;
        while (start + 1 < end) {
            mid = start + (end - start) / 2;
            if (nums[mid] < nums[mid - 1]) {
                end = mid;
            } else if (nums[mid] < nums[mid + 1]) {
                start = mid;
            } else {
                return mid;
            }
        }
        if (nums[start] > nums[end]) {
            return start;
        } else {
            return end;
        }
    }
}
```

## 易错点

1. 学会画图分析不同的局面，然后考虑最优解
