leetcode之384打乱数组Golang

时间:2020-10-16 10:40:05   收藏:0   阅读:23

题目描述

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

示例:

// 以数字集合 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())
// 求0-9的随机数
number:=rand.Intn(10)

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

代码

	// 使用洗牌算法
	// 设置随机数种子
	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
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!