Показать сообщение отдельно
  #118 (permalink)  
Старый 20.08.2018, 08:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Alexandroppolus
поиск, a[i] >= i - смотрим влево, a[i] < i - вправо

function indexEqualsValue(a)
      {
        var max = a.length;
        var min = 0;
        var i;
        while (min != max) {
            i = Math.floor((max + min)/2);
            if (a[i] > i) max = i;
            else if (a[i] < i) min = i + 1;
            else if (i && a[i-1] == i-1) max = i;
            else return i
        }
            return -1
      }
      var i = indexEqualsValue([-8,0,2,5])
      alert(i);//2
      i = indexEqualsValue([-1,0,3,6])
      alert(i);//-1
      i = indexEqualsValue([0,1,2,3])
      alert(i);//0
      i = indexEqualsValue([-3,0,1,3,10])
      alert(i);//3

Последний раз редактировалось рони, 20.08.2018 в 09:06.
Ответить с цитированием