Дан слайс nums длины n, каждый элемент которого — число от 1 до n.
Некоторые числа встречаются дважды или чаще, поэтому другие пропали. Верните все
числа из 1..n, которых нет в nums, по возрастанию.
Решение — O(n) по времени и O(1) дополнительной памяти (результат не
считается). Менять nums во время работы можно, но к возврату из функции он
должен быть восстановлен.
// FindDisappeared возвращает отсутствующие в nums числа из 1..len(nums) по возрастанию.
func FindDisappeared(nums []int) []int
Примеры
[4, 3, 2, 7, 8, 2, 3, 1] → [5, 6]
[1, 1] → [2]
[1] → []
[] → []
Ограничения
0 ≤ n ≤ 10⁶, 1 ≤ nums[i] ≤ n.
- Вспомогательные
map, []bool и копии входа не подходят: тест меряет память.
Это тот же приём «индекс как флаг», что и в задаче про минимальное
отсутствующее число (21-t004), но там упор на границу ответа, а здесь — на
нулевую дополнительную память.