LeetCode刷题Medium篇Shuffle an Array

题目

Shuffle a set of numbers without duplicates.

Example:

// 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();

解法

遍历数组,并产生一个随机索引,交换当前元素和随机元素,直到数组结束,就可以达到洗牌的目的。

reset只能保留数组副本。

class Solution {
    
    private int[] array;
    
    private int[] original;
    
    Random random=new Random();
    
    public Solution(int[] nums) {
        array=nums;
        original=nums.clone();
    }
    
    private int randRange(int min,int max){
        return random.nextInt(max-min)+min;
    }
    
    /** Resets the array to its original configuration and return it. */
    public int[] reset() {
        array=original;
        return original.clone();
    }
    private void swap(int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    
    /** Returns a random shuffling of the array. */
    public int[] shuffle() {
        for(int i=0;i<array.length;i++){
            swap(i,randRange(i,array.length));
        }
        return array;
    }
}

/**
 * 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();
 */

猜你喜欢

转载自blog.csdn.net/hanruikai/article/details/85230062