Привет! Меня зовут Иван и в этой статье я хочу поделиться с тобой своим опытом заполнения массива уникальными рандомными числами в Golang с использованием одной функции и при этом минимизации вычислительной сложности․
Используем алгоритм уникальных рандомных чисел
Давай начнем с объяснения алгоритма, который мы будем использовать․ Он основан на идее использования множества для хранения уже сгенерированных чисел․ Мы будем генерировать рандомное число и проверять, есть ли оно уже в множестве․ Если число уже есть, то мы пропускаем его и генерируем новое․ Таким образом, мы гарантируем уникальность чисел․
Реализация функции в Golang
Теперь давайте реализуем функцию, которая заполнит массив уникальными рандомными числами․ Вот код⁚
go
package main
import (
″fmt″
″math/rand»
″time″
)
func generateUniqueRandomNumbers(n int) []int {
rand․Seed(time․Now․UnixNano)
numbers ⁚ make([]int, n)
usedNumbers ⁚ make(map[int]bool)
for i ⁚ 0; i < n; i { randomNumber ⁚ rand․Intn(n) for usedNumbers[randomNumber] { randomNumber rand․Intn(n) } numbers[i] randomNumber usedNumbers[randomNumber] true } return numbers } func main { n ⁚ 10 randomNumbers ⁚ generateUniqueRandomNumbers(n) fmt․Println(randomNumbers) }
В этом примере мы сначала инициализируем генератор случайных чисел с помощью функции `rand․Seed(time․Now․UnixNano)`․ Затем мы создаем массив `numbers` размером `n` и множество `usedNumbers`, которое будет хранить уже использованные числа․
Затем мы итерируемся по массиву и генерируем случайное число с помощью функции `rand․Intn(n)`․ После этого мы проверяем, есть ли уже это число в множестве `usedNumbers`․ Если число уже есть, то мы генерируем новое число и продолжаем проверку до тех пор, пока не получим уникальное число․ Затем мы добавляем это число в массив и отмечаем его как использованное, добавляя его в множество `usedNumbers`․
Наконец, мы возвращаем заполненный массив с уникальными рандомными числами․
Теперь у тебя есть функция, которая заполнит массив уникальными рандомными числами с использованием только одной функции и минимальной вычислительной сложностью․ Ты можешь использовать эту функцию в своих проектах на Golang․ Удачи!