zoukankan      html  css  js  c++  java
  • Java [Leetcode 384]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();

    解题思路:

    每次往后读取数组的时候,当读到第i个的时候以1/i的概率随机替换1~i中的任何一个数,这样保证最后每个数字出现在每个位置上的概率都是相等的。

    证明:

    设x元素在第m次的时候出现在位置i的概率是1/m,那么在第m+1次的时候,x仍然待在位置i的概率是 1/m * m/(m+1) = 1/(m+1)

    代码描述:

    public class Solution {
    
    	private int[] nums = null;
    	private Random random = null;
    
        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 = (int[])nums.clone();
            for(int i = 1; i < nums.length; i++){
            	int j = random.nextInt(i + 1);
            	swap(a, i, j);
            }
            return a;
        }
    
        private void swap(int[] a, int i, int j){
        	int temp = a[i];
        	a[i] = a[j];
        	a[j] = temp;
        }
    }
    
    /**
     * 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();
     */
    

      

  • 相关阅读:
    树莓派相关知识
    yum mysql 需要:libsasl2.so.2()(64bit)的解决办法
    python 虚拟环境
    pip 查看某个包有哪些版本并升级
    C# DiagnosticSource and DiagnosticListener
    C# IObservable与IObserver观察者模式
    Visual Studio编译正常,但仍显示红线(Visual studio compiles fine but still shows red lines)
    查看PDB Guid 工具 dumpbin.exe 路径
    VMware vSphere 7.0 安装教程
    gacutil.exe 文件路径
  • 原文地址:https://www.cnblogs.com/zihaowang/p/5801312.html
Copyright © 2011-2022 走看看