码迷,mamicode.com
首页 > 编程语言 > 详细

leetcode之384打乱数组Golang

时间:2020-10-16 10:40:05      阅读:23      评论:0      收藏:0      [点我收藏+]

标签:shuff   number   class   new   方法   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())
// 求0-9的随机数
number:=rand.Intn(10)

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

  • 遍历数组,设数组长度为length
    • 对于第一个数,使用随机数求0--(length-1)之间的随机数,这个随机数就是数组的一个下标,将这个下标对应的数组中的元素与第一个元素交换位置
    • 对于第二个数,使用随机数求0--(length-2)之间的随机数,然后将这个随机数加上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

标签:shuff   number   class   new   方法   i++   需要   dex   就是   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!