1,题目要求
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();
随机播放一组数字而不重复。
2,题目思路
对于这道题,要求将一个数组随机化。
随机化,而且保证不能有重复的数字。
因此,我们可以通过对一个新数组的数据元素下标的随机化,然后利用交换的策略,以实现数组的随机,并保证没有重复的数字。
C++中rand() 函数的用法
1、rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。
2、如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100。
3,代码实现
int x = []() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution {
public:
Solution(vector<int>& nums) {
rnums = nums;
}
/** Resets the array to its original configuration and return it. */
vector<int> reset() {
return rnums;
}
/** Returns a random shuffling of the array. */
vector<int> shuffle() {
vector<int> res(rnums);
for(int i = 0;i<res.size();i++){
int pos = rand()%(res.size() - i);
swap(res[i+pos], res[i]);
}
return res;
}
private:
vector<int> rnums;
};
/**
* 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();
*/