Нужно вернуть слайс длины n из уникальных случайных чисел в диапазоне
[0, limit).
func UniqNums(n, limit int) ([]int, error)
Требования
- Результат — ровно
n чисел, все попарно различны, каждое в [0, limit).
- Числа случайные, и порядок тоже случайный: при
n == limit получается
случайная перестановка, а не 0, 1, …, n−1.
- Невозможные аргументы — ошибка, а не паника и не вечный цикл:
n < 0,
n > limit (столько разных чисел в диапазоне нет).
n == 0 — пустой слайс без ошибки.
limit может быть огромным (1 << 62), а n — маленьким. Память и время
должны зависеть от n, а не от limit.
Пример
nums, err := UniqNums(5, 100) // например [42 7 93 0 18], nil
_, err = UniqNums(11, 10) // err != nil: 11 разных чисел из 10 не набрать
Устно: какая сложность по времени и памяти у твоего решения? Что будет,
если n почти равно limit, и как это исправить?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.