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. 从英文中重建数字