Fisher-Yates 洗牌算法
生成当前下标到最后一个下标之间的随机数,然后互换。
class Solution {
public:
vector<int> origin;
Solution(vector<int>& nums):origin(nums.begin(),nums.end()) {}
/** Resets the array to its original configuration and return it. */
vector<int> reset() {
return origin;
}
/** Returns a random shuffling of the array. */
vector<int> shuffle() {
vector<int> res(origin.begin(),origin.end());
for(int i=0;i<res.size();++i){
int index = i+rand()%(res.size()-i);//生成[i,size-1]上的随机数
swap(res[i],res[index]);
}
return res;
}
};
/**
* 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();
*/