copy = Arrays.copyOf(nums, nums.length); //数组拷贝
int nextlnt(int n);//生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成
//指定区间的 int 值,也需要进行一定的数学变换
题目:
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。
实现 Solution class:
Solution(int[] nums) 使用整数数组 nums 初始化对象
int[] reset() 重设数组到它的初始状态并返回
int[] shuffle() 返回数组随机打乱后的结果
解答:
class Solution {
int[] nums, copy;
int n;
public Solution(int[] nums) {
this.nums = nums;
copy = Arrays.copyOf(nums, nums.length);
n = nums.length;
}
/**
* Resets the array to its original configuration and return it.
*/
public int[] reset() {
return copy;
}
private void swap(int[] arr, int l, int r) {
int tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
}
public int[] shuffle() {
Random r = new Random();
for (int i = n - 1; i > 0; i--) {
int j = r.nextInt(i + 1);
swap(nums, i, j);
}
return nums;
}
}