二分查找板子
板子
int binary_search1(int l, int r) {
while (l < r) {
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
int binary_search2(int l, int r) {
while (l < r) {
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
找无序数组峰值
int findPeakElement(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid + 1] <= nums[mid])
r = mid;
else l = mid + 1;
}
return l;
}
找有序数组旋转后的分界点(旋转后第一段的最大值)
int findRotateArrayBoundaryElement(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = l + r + 1 >> 1;
if (nums[mid] >= nums[0]) l = mid;
else r = mid - 1;
}
return l;
}