美文网首页
2018-11-24 Shuffle an Array

2018-11-24 Shuffle an Array

作者: 天际神游 | 来源:发表于2018-11-24 09:56 被阅读0次

题目描述:

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

解法:

Knuth洗牌算法:
遍历一次数组, 在第 i 个位置的时候, 随机选取前面所有元素的第 j 个元素中的一个(包括自己), 然后交换.
这样轮询一遍之后数组就被打乱了, 且各个元素出现在各个位置的概率是相等的.

class Solution {

    private int[] nums;
    private Random random;
    private int length;
    
    public Solution(int[] nums) {
        this.nums = nums;
        this.length = nums.length;
        this.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() {
        int[] res = new int[length];
        for(int i=0; i<length; i++){
            res[i] = nums[i];
            // 选取第 j 个元素, 然后交换. 即可保证复制一遍完成后数组随机
            int j = random.nextInt(i+1);
            swap(res, i, j);
        }
        return res;
    }
    
    private void swap(int[] arr, int i, int j){
        if(i==j){
            return;
        }else{
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}

相关文章

  • 2018-11-24 Shuffle an Array

    题目描述: 打乱一个没有重复元素的数组。 解法: Knuth洗牌算法:遍历一次数组, 在第 i 个位置的时候, 随...

  • Shuffle an Array

    打乱一个没有重复元素的数组。 示例: // 以数字集合 1, 2 和 3 初始化数组。int[] nums = {...

  • Shuffle an Array

    题目来源要求将一个数组随机打乱。不会…看了下答案,需要用到随机洗牌算法,介绍可以看这里。只需要从后往前遍历,每次随...

  • 算法

    数组乱序 Array.prototype.shuffle = function () { var input =...

  • Leetcode - Shuffle an Array

    My code: 之前做 find K largest number in array 正好做过类似的。这道题目不...

  • GameplayKit

    1. It can shuffle an array. Like in the FlagGame, we want...

  • 2020-11-15-简单-1470. 重新排列数组

    题目链接:https://leetcode-cn.com/problems/shuffle-the-array/[...

  • JS实现两种洗牌算法

    1、常见的方法 - 使用Array.prototype.sort() knuth-shuffle洗牌算法

  • 1 - Easy - Shuffle an Array

    打乱一个没有重复元素的数组。 示例: // 以数字集合 1, 2 和 3 初始化数组。int[] nums = {...

  • 384. Shuffle an Array

    题目分析 原题链接,登录 LeetCode 后可用这道题目要求我们完善 shuffle 方法,将一个数组进行乱序操...

网友评论

      本文标题:2018-11-24 Shuffle an Array

      本文链接:https://www.haomeiwen.com/subject/daseqqtx.html