• [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();

    给一个没有重复数字的数组,实现重置和洗牌的功能。

    解法:遍历数组每个位置,每次都随机生成一个坐标位置,然后交换当前位置和随机位置的数字,这样如果数组有n个数字,那么也随机交换了n组位置,从而达到了洗牌的目的。

    Java:

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

    Python:

    import random
    
    
    class Solution(object):
    
        def __init__(self, nums):
            """
            :type nums: List[int]
            :type size: int
            """
            self.__nums = nums
    
    
        def reset(self):
            """
            Resets the array to its original configuration and return it.
            :rtype: List[int]
            """
            return self.__nums
    
    
        def shuffle(self):
            """
            Returns a random shuffling of the array.
            :rtype: List[int]
            """
            nums = list(self.__nums)
            for i in xrange(len(nums)):
                j = random.randint(i, len(nums)-1)
                nums[i], nums[j] = nums[j], nums[i]
            return nums
    
    
    # Your Solution object will be instantiated and called as such:
    # obj = Solution(nums)
    # param_1 = obj.reset()
    # param_2 = obj.shuffle()  

    C++:

    class Solution {
    public:
        Solution(vector<int> nums): v(nums) {}
        
        /** Resets the array to its original configuration and return it. */
        vector<int> reset() {
            return v;
        }
        
        /** Returns a random shuffling of the array. */
        vector<int> shuffle() {
            vector<int> res = v;
            for (int i = 0; i < res.size(); ++i) {
                int t = i + rand() % (res.size() - i);
                swap(res[i], res[t]);
            }
            return res;
        }
        
    private:
        vector<int> v;
    };
    

      

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    在Ubuntu下编译FFmpeg
    AirSim
    上海高分无人机大赛
    飞机维修流程
    心灵感应灯三 服务器端
    Kmeans基本思想
    小觅双目相机测试
    ORB SLAM2在Ubuntu 16.04上的运行配置
    Moleskine智能笔+专用本:写完随时传到手机
    机器学习培训
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9739181.html
Copyright © 2020-2023  润新知