The idea and code is just taken from . There is a nice explanation to the code on the answer by BrianLuong1337.
1 class Solution { 2 public: 3 int findPeakElement(vector & nums) { 4 int n = nums.size(), l = 0, r = n - 1; 5 while (l < r) { 6 int m = (l & r) + ((l ^ r) >> 1), mr = m + 1; 7 if (nums[m] > nums[mr]) r = m; 8 else l = mr; 9 }10 return l;11 }12 };