В общем бинарном поиске мы ищем значение, которое появляется в массиве. Иногда, однако, нам нужно найти первый элемент, который больше или меньше цели.
Вот мое уродливое, неполное решение:
// Assume all elements are positive, i.e., greater than zero
int bs (int[] a, int t) {
int s = 0, e = a.length;
int firstlarge = 1 << 30;
int firstlargeindex = -1;
while (s < e) {
int m = (s + e) / 2;
if (a[m] > t) {
// how can I know a[m] is the first larger than
if(a[m] < firstlarge) {
firstlarge = a[m];
firstlargeindex = m;
}
e = m - 1;
} else if (a[m] < /* something */) {
// go to the right part
// how can i know is the first less than
}
}
}
Есть ли более элегантное решение для такого рода проблем?