谁知道 leetcode之384打乱数组Golang

2020年10月18日 星期日 seo网站关键词优化

 

标签:shuffnumberclassnew方法i++需要dex就是

题目描述

打乱一个没有重复元素的数组。

示例:

// 以数字集合 1, 2 和 3 初始化数组。
int[] nums = {1,2,3};
Solution solution = new Solution(nums);

// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。
solution.shuffle();

// 重设数组到它的初始状态[1,2,3]。
solution.reset();

// 随机返回数组[1,2,3]打乱后的结果。
solution.shuffle();

算法

这里只说随机返回数组打乱的方式

其实就是求解随机数

下面是go语言求随机数的方法

// 设置随机数种子
rand.Seed(time.Now().UnixNano())
// 求09的随机数
number:=rand.Intn(10)

接下来就是将数组随机打乱方式

  • 遍历数组,设数组长度为length
    • 对于第一个数,使用随机数求0(length1)之间的随机数,这个随机数就是数组的一个下标,将这个下标对应的数组中的元素与第一个元素交换位置
    • 对于第二个数,使用随机数求0(length2)之间的随机数,然后将这个随机数加上1,得到数组剩下元素中的一个下标,将这个下标对应的元素与第二个元素交换位置
    • 一直重复上面的操作,知道遍历完整个数组,那么得到的新的数组就是随机打乱后的数组

代码

	// 使用洗牌算法
	// 设置随机数种子
	rand.Seed(time.Now().UnixNano())
	// 新创建一个底层数组,因为我们后面会修改这个底层数组的值,所以为了能够重置,我们需要新创建一个底层数组
	res := make([]int, len(s.originalArray))
	copy(res, s.originalArray)
	length := len(res)
	for i := 0; i < length; i++ {
		index := rand.Intn(length  i)
		res[i], res[index+i] = res[index+i], res[i]
	}
	return res

leetcode之384打乱数组Golang

标签:shuffnumberclassnew方法i++需要dex就是

原文地址:https://www.cnblogs.com/gyyyl/p/13820561.html

您可能也喜欢