题目
Shuffle a set of numbers without duplicates.
翻译
对一组数字进行洗牌
思路详解
每次往后读取数组的时候,当读到第i个的时候以1/i的概率随机替换1~i中的任何一个数,这样保证最后每个数字出现在每个位置上的概率都是相等的。
代码
class Solution {
public:
vector<int> numbers;
Solution(vector<int> nums) {
numbers = nums;
}
/** Resets the array to its original configuration and return it. */
vector<int> reset() {
return numbers;
}
/** Returns a random shuffling of the array. */
vector<int> shuffle() {
//srand((int)time(0));
/* 每次发牌的时候任意分配待交换的数据 */
vector<int> res = numbers;
int length = res.size();
for(int i = 0; i < length; i ++){
int v = rand() % length;
//交换
int m = res[i];
res[i] = res[v];
res[v] = m;
}
return res;
}
};