384. 打乱数组

题目描述

给你一个整数数组 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出一个新对象。

添加新评论