The idea and code is just taken from this link. There is a nice explanation to the code on the answer by BrianLuong1337.
1 class Solution { 2 public: 3 int findPeakElement(vector<int>& 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 };