Сообщение от 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