Нужно заполнить массив уникальными рандомными числами, сделать это всё в одной функции, и чтобы вычислительная сложность была как можно меньше Golang
go
package main
import (
"fmt"
"math/rand"
"time"
)
// Функция для генерации уникальных случайных чисел
func generateUniqueRandomNumbers(n int) []int {
// Создаем генератор случайных чисел с использованием текущего времени в качестве сида
rand.Seed(time.Now().UnixNano())
// Создаем слайс для хранения уникальных чисел
uniqueNumbers := make([]int, n)
// Создаем словарь для проверки уникальности чисел
uniqueCheck := make(map[int]bool)
// Заполняем слайс уникальными случайными числами
for i := 0; i < n; {
// Генерируем случайное число в заданном диапазоне
num := rand.Intn(n)
// Проверяем, является ли число уникальным
if !uniqueCheck[num] {
// Если число уникальное, добавляем его в слайс и отмечаем в словаре
uniqueNumbers[i] = num
uniqueCheck[num] = true
i++
}
}
return uniqueNumbers
}
func main() {
// Определяем количество элементов в массиве
n := 10
// Генерируем уникальные случайные числа
numbers := generateUniqueRandomNumbers(n)
// Выводим сгенерированный массив на экран
fmt.Println(numbers)
}
В данном решении мы используем генератор случайных чисел `rand` из пакета `math`, который инициализируется текущим временем в качестве сида для обеспечения каждый раз разного набора чисел. Для обеспечения уникальности чисел мы используем словарь `uniqueCheck`, который помогает отслеживать уже сгенерированные числа.
В цикле мы генерируем новое случайное число и проверяем его на уникальность. Если число уникальное, мы добавляем его в массив `uniqueNumbers` и отмечаем в словаре `uniqueCheck`. Таким образом мы продолжаем генерировать числа до тех пор, пока не наберется нужное количество уникальных чисел.
В итоге функция `generateUniqueRandomNumbers` возвращает массив с уникальными случайными числами. В главной функции мы определяем количество элементов в массиве и выводим его на экран для проверки.
Такое решение обеспечивает генерацию массива с уникальными случайными числами в одной функции и с наименьшей вычислительной сложностью, так как мы используем словарь для быстрой проверки уникальности чисел. Количество итераций цикла будет пропорционально размеру массива и будет достаточно эффективным даже для больших значений.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет