У меня есть два списка с различным количеством элементов, содержащих как минимум один дубликат каждого. Я пытаюсь объединить меньший список с большим, в худшем случае с линейным временем.
Я могу понять это, используя третий временный список, но мне специально нужно объединить меньший список в больший, а не создавать третью.
Вот функция, которая берет список и объединяет их, используя новый список "temp". Примечание: здесь используется пользовательский список, но вы можете предположить, что метод вставки работает так же в версии STL.
void mergeNoDups(const List<Object> & rhs)
{
List<int> temp;
for (const_iterator iter = this->begin(), iter2 = rhs.begin(); iter != this->end() || iter2 != rhs.end();)
{
if((iter != end()) && iter2 == end() || (*iter < *iter2))
{
temp.push_back(*iter);
++iter;
}
else if (*iter == *iter2)
{
++iter2;
}
else if (*iter > *iter2)
{
temp.push_back(*iter2);
++iter2;
}
}
}
Заданные входные данные:
list1 = [0 1 2 5 6]
list2 = [3 4 5 7]
list1 должно быть:
list 1 = [0 1 2 34 5 6 7]
Любые советы?