**Difficulty: Medium**

**Frequency: N/A**

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

Given an input array where `num[i] ≠ num[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 `num[-1] = num[n] = -∞`

.

For example, in array `[1, 2, 3, 1]`

, 3 is a peak element and your function should return the index number 2.

**My solution:**

**Data structure:**

**Steps:**

**Complexity:**

**Test cases:**

**Corner cases:**

**Code:**

class Solution { public: int findPeakElement(vector<int>& nums) { if (nums.empty()) return -1; if (nums.size() == 1) return 0; int n = nums.size(); int lo = 0, hi = n - 1, med; while (lo < hi) { med = lo + (hi - lo) / 2; if (nums[med] < nums[med + 1]) lo = med + 1; else hi = med; } return lo; } };

**Another solution:**

**Data structure:**

**steps:**

**Complexity**:

**Code**:

**Things to learn:**