题目来源
题目描述
class Solution {
public:
Solution(vector<int>& nums) {
}
vector<int> reset() {
}
vector<int> shuffle() {
}
};
题目解析
思路
- 0~ N - 1之间做一个随机,然后把它交换到最后一个位置
- 0~ N - 2之间做一个随机,然后把它交换到最后N-2位置
- …
class Solution {
std::vector<int> origin;
std::vector<int> shuffe;
int N;
public:
Solution(vector<int>& nums) {
origin = nums;
N = origin.size();
shuffe.resize(N);
for (int i = 0; i < N; ++i) {
shuffe[i] = origin[i];
}
}
vector<int> reset() {
return origin;
}
vector<int> shuffle() {
for (int i = N - 1; i >= 0; --i) {
int r = (int)(rand() % (i + 1));
std::swap(shuffe[r], shuffe[i]);
}
return shuffe;
}
};