Template
// Minimize x such that condition(x) is true
int binarySearchMinimize(int[] arr) {
int lo = -1, hi = arr.length;
while (lo + 1 < hi) {
int mid = lo + (hi - lo) / 2;
if (condition(arr, mid)) {
hi = mid;
} else {
lo = mid;
}
}
return hi;
}
// Maximize x such that condition(x) is true
int binarySearchMaximize(int[] arr) {
int lo = -1, hi = arr.length;
while (lo + 1 < hi) {
int mid = lo + (hi - lo) / 2;
if (condition(arr, mid)) {
lo = mid;
} else {
hi = mid;
}
}
return lo;
}
boolean condition(int[] arr, int idx) {
// Some condition on arr[idx]
// Return true or false
return true;
}
Last updated
Was this helpful?