Найдите первый элемент в отсортированном массиве, который больше, чем target

В обычном двоичном поиске мы ищем значение, которое появляется в массиве. Иногда, однако, нам нужно найти первый элемент, который больше или меньше целевого.

Вот мое уродливое неполное решение:

// 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  
    }
  }
}

Есть ли более элегантное решение для такого рода проблем?

51
задан royhowie 25 February 2017 в 09:17
поделиться