Создание массива уникальных случайных чисел

Сначала определите диапазон: без него задача неоднозначна. Простой вариант возвращает случайную перестановку чисел от 0 до n−1 — все значения в ней различны.

Короткий ответ

Что ответить на собеседовании

Сначала определите диапазон: без него задача неоднозначна. Простой вариант возвращает случайную перестановку чисел от 0 до n−1 — все значения в ней различны.

Подробный разбор

Ответ с пояснениями

Условие

Напишите функцию uniqRandn, которая должна возвращать срез из n различных случайных целых чисел.

import (
    "fmt"
    "math/rand"
)

func main() {
    fmt.Println(uniqRandn(10))
}

func uniqRandn(n int) []int {
    // ...
}

Ответ

Сначала определите диапазон: без него задача неоднозначна. Простой вариант возвращает случайную перестановку чисел от 0 до n−1 — все значения в ней различны.

Используя импорт math/rand из условия:

func uniqRandn(n int) []int {
    if n < 0 { panic("n must not be negative") }
    return rand.Perm(n)
}

Время и память O(n). Если требуется выбрать n разных чисел из более широкого диапазона [0,M), нужно задать M и проверить n<=M; можно перемешать диапазон либо использовать выборку без возвращения. math/rand не подходит для секретов или защитных токенов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее