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();
给定一个数组nums,对其进行洗牌,要求nums中的每个元素都以等概率被移动,并且能够返回初始数组。
代码1:
class Solution {
public:
vector<int> origin;
Solution(vector<int> nums) {
origin=nums;
}
/** 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,copyone=origin;
int len=copyone.size();
if(len==0){return copyone;}
while(len!=1){
int pos=rand() % (len);
res.push_back(copyone[pos]);
len--;
auto temp=copyone.erase(copyone.begin()+pos);
}
res.push_back(copyone[0]);
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();
*/
代码2:
class Solution {
public:
vector<int> ori;
Solution(vector<int> nums) {
ori=nums;
}
/** Resets the array to its original configuration and return it. */
vector<int> reset() {
return ori;
}
/** Returns a random shuffling of the array. */
vector<int> shuffle() {
vector<int> res=ori;
int size=res.size();
for(int i=0;i<size;i++){
int pos;
pos=rand() % size;
swap(res[i],res[pos]);
}
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();
*/
代码3:
class Solution {
public:
vector<int> origin;
Solution(vector<int> nums) {
origin=nums;
}
/** 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> nums = origin;
int n = origin.size();
for (int i=0; i<n; i++) {
int pos = rand() % (n-i);
swap(nums[i], nums[pos+i]);// swap with the one after i
}
return nums;
/*
vector<int> res,copyone=origin;
int len=copyone.size();
if(len==0){return copyone;}
while(len!=1){
int pos=rand() % (len);
res.push_back(copyone[pos]);
len--;
auto temp=copyone.erase(copyone.begin()+pos);
}
res.push_back(copyone[0]);
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();
*/