题目描述
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。
实现 Solution class:
- Solution(int[] nums) 使用整数数组 nums 初始化对象
- int[] reset() 重设数组到它的初始状态并返回
- int[] shuffle() 返回数组随机打乱后的结果
解题思路
遍历数组,交换当前数和random生成的一个数,知道数组遍历完成。注意,Random是伪随机,同一个对象对于一个random对象。
代码如下:
class Solution {
int[] raw;
Random random;
public Solution(int[] nums) {
raw = Arrays.copyOf(nums,nums.length);
random = new Random();
}
/** Resets the array to its original configuration and return it. */
public int[] reset() {
return raw;
}
/** Returns a random shuffling of the array. */
public int[] shuffle() {
int[] ints = Arrays.copyOf(raw, raw.length);
for (int i = 0; i < ints.length; i++) {
int j = random.nextInt(ints.length);
int temp = ints[i];
ints[i] = ints[j];
ints[j] = temp;
}
return ints;
}
}
运行结果:
22:45 info
解答成功:
执行耗时:90 ms,击败了99.06% 的Java用户
内存消耗:46.5 MB,击败了90.94% 的Java用户
小结
注意操作对象时,赋值是地址,会影响原来的数组对象,需要clone出一个新对象。