LeetCode——第384题:打乱数组

参考

题目:

打乱一个没有重复元素的数组。

示例:

// 以数字集合 1, 2 和 3 初始化数组。
int[] nums = {1,2,3};
Solution solution = new Solution(nums);

// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。
solution.shuffle();

// 重设数组到它的初始状态[1,2,3]。
solution.reset();

// 随机返回数组[1,2,3]打乱后的结果。
solution.shuffle();

代码:

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Random;

/**
 * @作者:dhc
 * @创建时间:9:06 2018/8/4
 * @描述:384,打乱数组
 */
public class ThreeHundredAndEightFour {
    private static int[] arr1;
    private static int[] arr2;
    public ThreeHundredAndEightFour(int[] nums){
        arr1 = nums;
    }
    /** Resets the array to its original configuration and return it. */
    public int[] reset() {
        return  arr1;
    }

    /** Returns a random shuffling of the array. */
    //洗牌算法
    public  static int[] shuffle() {
        arr2 = new int[arr1.length];
        System.arraycopy(arr1,0,arr2,0,arr1.length);
        /*for (int i = 0; i < arr1.length; i++) {
            arr2[i] = arr1[i];
        }*/
        Random ran = new Random();
        for(int i = 0; i < arr2.length;i++){
            //这里不能用int random = (int)(Math.random()*(arr2.length));,这样最后的
            // 每种结果概率是不一样的
            //int random = (int)(Math.random()*(i+1));
            int random = ran.nextInt(i);
            int tem = arr2[random];
            arr2[random] = arr2[i];
            arr2[i] = tem;
        }
        return arr2;
    }
}


你可能感兴趣的:(java,算法,leetCode)