Сначала определите диапазон: без него задача неоднозначна. Простой вариант возвращает случайную перестановку чисел от 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 не подходит для секретов или защитных токенов.