это мой первый вопрос StackOverflow, поэтому, пожалуйста, дайте мне знать, если я не выполнил рекомендации сообщества по этому вопросу и должен ли я удалить его.
Я получил свой первый вопрос на собеседовании, и меня отвергли из-за моей реализации.
Вопрос в том:
Разработайте и реализуйте класс C++, который хранит коллекцию целых чисел. На стройке коллекция должна быть пустой. Один и тот же номер может храниться более одного раза.
Реализуйте следующие методы:
-
Вставьте (int x). Вставьте запись для значения "х".
-
Стереть (int x). Удалите одну запись со значением "x" (если она существует) из коллекции.
-
Стереть (int от, int до). Удалите все записи со значением в диапазоне [от, до).
-
Считать (int от, int до). Посчитайте, сколько записей имеют значение в диапазоне [от, до).
Я подумал, что хорошей реализацией будет использование связанных списков, так как он использует несмежную память, и удаление записей не потребует перетасовки большого количества данных (как в векторах или массивах). Тем не менее, я получил отзыв от компании, в котором говорилось, что моя реализация была O (n ^ 2) временной сложности и была очень неэффективной, поэтому я был отклонен. Я не хочу повторять ту же ошибку, если подобный вопрос появляется в другом интервью, поэтому я хотел бы знать, как лучше всего подойти к этому вопросу (друг предложил использовать карты, но он также не уверен).
Мой код:
void IntegerCollector::insert(int x)
{
entries.push_back(x);
}
void IntegerCollector::erase(int x)
{
list<int>::iterator position = find(entries.begin(), entries.end(), x);
if (position != entries.end())
entries.erase(position);
}
void IntegerCollector::erase(int from, int to)
{
list<int>::iterator position = entries.begin();
while (position != entries.end())
{
if (*position >= from && *position <= to)
position = entries.erase(position);
else
position++;
}
}
int IntegerCollector::count(int from, int to)
{
list<int>::iterator position = entries.begin();
int count = 0;
while (position != entries.end())
{
if (*position >= from && *position <= to)
count++;
position++;
}
return count;
}
В отзывах говорилось, что они будут нанимать только кандидатов, способных реализовать решения со сложностью O (nlogn).