题目

类型:Array
image.png

解题思路

  • 设待原地乱序的数组 nums。
  • 循环 n 次,在第 i 次循环中(0≤i<n)
    • 在 [i,n) 中随机抽取一个下标 j
    • 将第 i 个元素与第 j 个元素交换

其中数组中的 nums[i .. n−1] 的部分为待乱序的数组,其长度为 nums[0 .. i−1]的部分为乱序后的数组,其长度为 i。

代码

  1. class Solution {
  2. int[] nums;
  3. int[] original;
  4. public Solution(int[] nums) {
  5. this.nums = nums;
  6. this.original = new int[nums.length];
  7. System.arraycopy(nums, 0, original, 0, nums.length);
  8. }
  9. public int[] reset() {
  10. System.arraycopy(original, 0, nums, 0, nums.length);
  11. return nums;
  12. }
  13. public int[] shuffle() {
  14. Random random = new Random();
  15. for (int i = 0; i < nums.length; ++i) {
  16. int j = i + random.nextInt(nums.length - i);
  17. int temp = nums[i];
  18. nums[i] = nums[j];
  19. nums[j] = temp;
  20. }
  21. return nums;
  22. }
  23. }