да здравствует коллективный разум!

Пожалуй, после всех оптимизаций алгоритм получился достаточно простой для того, чтобы даже не выносить его в отдельный метод

тогда и от промежуточного списка можно избавиться...
PS. Можно разве что перед получением второго множества отличающихся значений проверять, что первое множество отличающихся значений не пустое.