题目描述:
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。
实现 Solution class:
Solution(int[] nums) 使用整数数组 nums 初始化对象
int[] reset() 重设数组到它的初始状态并返回
int[] shuffle() 返回数组随机打乱后的结果
题目链接:
打乱数组
思路:第一个是构造函数,本题不仅仅考查洗牌算法,也考察对基础知识的掌握情况,首先要有两个成员变量,即两个数组,说通俗点就是一个用来给后面函数打乱用的,一个用来保存原始数据给另一个函数做返回值用的。
所以我们主要写的就是一个打乱数组的函数。
代码如下:
class Solution {
int[] array;
int[] original;
//这个写在函数里面也行,我觉得好看就搬上来了。
private Random rand = new Random();
public Solution(int[] nums) {
array = nums;
//拷贝一份给reset函数用。
original = array.clone();
}
public int[] reset() {
return original;
}
public int[] shuffle() {
//因为Random函数是左闭右开的,所以这里的i等于array.length才能保证每个下标都能取到,下面的相应调整为(array.length - 1)对应数组下标。
for (int i = array.length; i > 1;i--) {
int res = rand.nextInt(i);
//交换。也可以单独写一个函数出去。
int tmp = array[i - 1];
array[i - 1] = array[res];
array[res] = tmp;
}
return array;
}
}