LeetCode 384 打乱数组[洗牌] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 384 打乱数组[洗牌] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
一道经典的洗牌算法题目,洗牌算法的核心就是在前n-1张牌洗好的情况下,第n张牌随机与前n-1张牌的其中一张牌交换,或者不换,代码如下:

class Solution 
public:
    vector<int> copy;
    Solution(vector<int>& nums) 
         copy = nums;
    
    
    vector<int> reset() 
        return copy;
    
    
    vector<int> shuffle() 
        vector<int> shuf = copy;
        for(int i = 1; i < shuf.size(); i ++) 
            int index = rand() % (i + 1);
            if(index != i) 
                swap(shuf[i], shuf[index]);
            
        
        return shuf;
    
;

/**
 * Your Solution object will be instantiated and called as such:
 * Solution* obj = new Solution(nums);
 * vector<int> param_1 = obj->reset();
 * vector<int> param_2 = obj->shuffle();
 */

当然了,你也可以用全排列的方式,固定住两个数组,然后一个作为reset的数组,一个作为排列的数组,调用STL的next_permutation实现全排列,代码如下:

class Solution 
public:
    int n;
    vector<int> arr, orgin;

    Solution(vector<int>& nums) 
        n = nums.size();

        for(int t : nums)
            arr.push_back(t);
            orgin.push_back(t);
        
    
    
    vector<int> reset() 
        return orgin;
    
    
    vector<int> shuffle() 
        next_permutation(arr.begin(), arr.end());

        return arr;
    
;

以上是关于LeetCode 384 打乱数组[洗牌] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 384. Shuffle an Array 数组洗牌

LeetCode 384. 打乱数组 / 859. 亲密字符串/ 423. 从英文中重建数字

p105 打乱数组(leetcode 384)

题目地址(384. 打乱数组)

解题报告Leecode 384. 打乱数组——Leecode每日一题系列

LeetCode_Nov_4th_Week