Все, что нам нужно сделать, это -
- Узнайте человека, который никого не знает
- А затем проверьте, что все знают этого человека
Шаг 1: Найдите человека, который больше никого не знает.
Изначально каждый является нашим кандидатом. Итак, давайте начнем с любого я в качестве текущего узла. Перебрать всех кандидатов j. Если Знает (я, J) является ложным. Тогда j не может быть нашим кандидатом. Так что уберите j из кандидатов. Если Knows (i, j) имеет значение true для любого j, то я не могу быть нашим кандидатом, поэтому текущий узел будет обновлен до j, и удалит узел i. Повторяйте это, пока мы не сможем обновить текущий узел. Последний текущий узел - наш последний кандидат. Это будет фактически O (N), потому что на каждом шаге мы фактически удаляем один узел, i или j.
Шаг 2: Мы нашли человека, который больше никого не знает. Но мы должны убедиться, что все его знают. Что мы можем просто сделать, так это перебрать все узлы и проверить, что O (N). Если мы обнаружили, что это не наш узел, то такого решения не существует. Потому что не может быть другого узла k, который является решением, так как я не знаю k.
Мы можем использовать список ссылок для хранения списка кандидатов, так что удаление кандидата будет O (1).