2013-09-05 3 views
1

У меня есть отсортированный массив из n элементов. Значения могут быть отрицательными или положительными.Найти индекс массива и значение, которое равно

Особенностью этого массива является то, что из n элементов существует один конкретный элемент, где [x] = x и остальные данные не удовлетворяют условию.

Есть ли лучший способ найти такой «х», кроме цикла всего массива.

Пусть мой массив [-2999, -33,0,2,4,67,654] Здесь [4] = 4, а остальное не соответствует такому критерию ..

ответ

1

Поскольку массив уже отсортированный, вы можете использовать бинарный поиск, который является O (lgn), чтобы найти элемент.

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

http://en.wikipedia.org/wiki/Binary_search_algorithm

+0

Но я не знаю номер правильно? Мне нужно найти индекс, значение которого совпадает или, другими словами, значение, индекс которого тот же. Как двоичный поиск поможет мне здесь? – Avinash

+0

Если я не ошибаюсь, двоичный поиск помогает найти элемент в O (log n), тогда как я не знаю, что здесь является элементом, который соответствует этому условию. – Avinash

+1

Подумайте об этом: выберите любой элемент с индексом 'i'. Если 'a [i] = i', то вы ударяете элемент. В противном случае 'a [i]> i' или' a [i] Zane

0

вы можете использовать это. Это O (N).

for(i=0;i<MAX;i++){ 
    if(i==array[i]){//do something} 
} 

Если массив сортируется в порядке убывания использовать

for(i=MAX-1;i>=0;i11){ 
    if(i==array[i]){//do something} 
} 

Здесь МАХ размер массива

+0

Это то, что я специально сказал, что я не хочу. См. Комментарии от @ Zane. Вы это четко поймете – Avinash

Смежные вопросы