leetcode384。動揺配列(シャッフルアルゴリズム)

配列要素が繰り返しではありません混乱させる。

例:

//デジタルアレイを初期化するために、1、2及び3を設定します。
INT [] = {1,2,3} NUMS;
ソリューションソリューションソリューション新しい新=(NUMS)。

//動揺配列[1,2,3]および結果を返します。任意の確率[1,2,3]は同じでなければならない戻さ配置されています。
solution.shuffle();

//初期状態配列[1,2,3]にリセットします。
solution.reset();

//は崩壊のランダムな配列[1,2,3]の結果を返します。
solution.shuffle();

スワップ(I、rand.nextInt(長さ - I)+ I)。

class Solution {

    private int[] array;
    private int[] original;
    Random rand = new Random();
    public Solution(int[] nums) {
        array=nums;
        original=nums.clone();
        
    }
        public void swap(int i,int j) {
        int temp=0;
        temp=array[i];
        array[i]=array[j];
        array[j]=temp;
             
    }
    /** Resets the array to its original configuration and return it. */
    public int[] reset() {
        array = original;
        original = original.clone();
        return original;
    }


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

おすすめ

転載: blog.csdn.net/rudychan/article/details/94600618