Предполагая, что у вас есть два списка уникальных элементов, и порядок не имеет значения, вы можете думать о них как о наборах, а не списках.
Если вы представляете себе диаграмму Венна, где список A — это один круг, а список B — другой, то их пересечение представляет собой постоянный пул.
Удалите все элементы в этом пересечении как из A, так и из B, и все, что осталось в A, будет удалено, а все, что осталось в B, будет добавлено.
Итак, пройдите через A, ища каждый элемент в B. Если вы найдете его, удалите его как из A, так и из B.
Тогда А — это список вещей, которые были удалены, а Б — это список вещей, которые были добавлены.
Я думаю...
[править] Хорошо, с новым ограничением «только 2 контейнера» то же самое остается в силе:
foreach( A ) {
if( eleA NOT IN B ) {
DELETED
}
}
foreach( B ) {
if( eleB NOT IN A ) {
ADDED
}
}
Тогда вы не создаете новый список и не уничтожаете старые... но это займет больше времени, как и в предыдущем примере, вы можете просто перебрать более короткий список и удалить элементы из более длинного. Здесь нужно сделать оба списка
Я бы сказал, что мое первое решение не использовало 4 контейнера, оно просто уничтожило два ;-)
person
tim_yates
schedule
24.09.2008