384. Shuffle an Array**

来源:互联网 发布:java多线程socket通信 编辑:程序博客网 时间:2024/06/05 05:39

Shuffle a set of numbers without duplicates.

// Init an array with set 1, 2, and 3.int[] nums = {1,2,3};Solution solution = new Solution(nums);// Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned.solution.shuffle();// Resets the array back to its original configuration [1,2,3].solution.reset();// Returns the random shuffling of array [1,2,3].solution.shuffle();
public class Solution {    private int[] nums;    private Random random;    public Solution(int[] nums) {        this.nums = nums;        random = new Random();            }    /** Resets the array to its original configuration and return it. */    public int[] reset() {        return nums;    }    /** Returns a random shuffling of the array. */    public int[] shuffle() {        if(nums==null) return null;        int[] a = nums.clone();        for(int j=1;j<a.length;j++){            int i=random.nextInt(j+1);            swap(a,i,j);        }        return a;    }    private void swap(int[] a, int i, int j){        int t = a[i];        a[i] = a[j];        a[j] = t;    }}/** * Your Solution object will be instantiated and called as such: * Solution obj = new Solution(nums); * int[] param_1 = obj.reset(); * int[] param_2 = obj.shuffle(); */

总结:nextInt(j + 1) returns a random num between [0, j]. By nextInt(j), you never get a chance to return the original order array.

          array.clone生成一个新数组



0 0
原创粉丝点击