Я решал учебник по двоичному поиску на хакереарте, но, видимо, что-то не так ... Формат ввода выглядит следующим образом: N = нет элементов в массиве элементов в по возрастанию Q = число тестов элементов можно найти в д тестовыхДвоичный поиск C++ (что является недостатком в этом коде)
#include <iostream>
using namespace std;
int main()
{
int n;cin>>n;
int ar[n];for(int y=0;y<n;y++) cin>>ar[y];
int q;cin>>q;
for(int u=0;u<q;u++)
{
int j;cin>>j;
int low=0,high=n-1,mid=(low+high)/2;
while(low<high)
{
mid=(low+high)/2;
if(ar[mid]<j) low=mid+1;
if(ar[mid]>j) high=mid-1;
}
cout<<mid-1<<endl;
}
return 0;
}
Редактировать:
Почему так много ненависти к объявлению массива переменных размеров. Это гораздо эффективнее писать, чем вектор ... И он совершенно легален в соответствии со стандартом C++ 99. Я использую это в стандарте C++ 11 и все мои программы работают с массивом переменных размеров.
Благодарим за указание недостатка. Случай j == ar [mid] не обрабатывается. После этого код должен работать.
Забудьте о представлении ответа и получать материалы .. совершенно не нужно, как я уже говорил, что это проблема на hackerearth .. это авто проверено .. представление ответа на вызов портит выходной формат
Это было мой первый вопрос здесь, сообщество было очень полезно. :). Кроме того, почему так трудно вставить код .. Я попытался вставить код и скопировать вставить в него .. но он не работает .. Я должен был вручную отступ всех 4 пространств :(
Правильный инструмент для решения таких проблем является ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
Помните, что для бинарного поиска требуется сортировка коллекции, которую вы просматриваете. Если это не так, поиск не будет работать. –
Кроме того, C++ не имеет [массивы переменной длины] (https://en.wikipedia.org/wiki/Variable-length_array), вместо этого используйте 'std :: vector'. –