解题思路:
用一个辅助数组vec,大小与传入数组一样,并且元素是生成的随机数。使得vec按照升序排序,并且原始数组也按照其排序方法排序。通过这种方式来随机打乱数组。
举个例子:
nums [2,3,1] vec [10,6,30]
那么vec按升序排序就是vec[0]和vec[1]交换,那么nums[0]和nums[1]也交换。所以
nums [3,2,1] vec [6,10,30]
具体代码如下
class Solution {
vector<int> m_nums; //初始数组
vector<int> n_nums; //用来操作的数组
vector<int> vec;
public:
Solution(vector<int>& nums) {
for(int i=0;i<nums.size();++i)
m_nums.push_back(nums[i]);
//调制大小
n_nums.resize(nums.size());
vec.resize(nums.size());
}
vector<int> reset() {
return m_nums;
}
vector<int> shuffle() {
int n=m_nums.size();
//生成[0-199]的随机数,范围无所谓
for(int i=0;i<n;++i)
vec[i]=rand()%200;
//拷贝原始数组
for(int i=0;i<n;++i)
n_nums[i]=m_nums[i];
//使用冒泡排序使得vec按升序排序
for(int i=0;i<n;++i){
for(int j=0;j<n-i-1;++j){
if(vec[j]>vec[j+1]){
swap(vec[j],vec[j+1]);
swap(n_nums[j],n_nums[j+1]); //n_nums也按照相同的规则排序,即打乱
}
}
}
return n_nums;
}
};
/**
* 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();
*/