class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int findPeakElement(vector<int>& nums) {
// write code here
switch (nums.size()) {
case 1: return 0;
case 2: return nums[0] > nums[1] ? 0 : 1;
default:;
}
int left = 0, right = nums.size() - 1;
while(left < right){
int mid = (left + right) / 2;
int state = (nums[mid] > nums[mid-1]) | ((nums[mid] > nums[mid+1]) << 1);
bool end = mid==left+1&&mid==right-1;
switch (state) {
case 0b00: if(nums[mid+1]>nums[mid-1]) {if(end) return left; else right=mid; }else{if(end) return right; else left = mid;} break;
if(end) return nums[left]>nums[right]?left:right; else ;
case 0b01: if(end) return right; else left=mid; break;
case 0b10: if(end) return left; else right=mid; break;
case 0b11: return mid;
}
}
return left;
}
};