二分法通用模板:
int left = 0, right = nums.length - 1;
for (; left < right; ) {
int mid = left + (right - left) / 2;
if (/* 条件判断 */) {
right = mid;
} else {
left = mid + 1;
}
}
题目1
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int n=nums.size();
int left=0,right=n-1;
while(left<right){
int mid=(left+right)>>1;
if(nums[mid]>nums[mid+1])
right=mid;
else
left=mid+1;
}
return right;
}
};