题目
给数组洗牌。给定一个数组,输出一个数组乱序的结果。
Input:[1,2,3]
Output:[1,3,2],[3,1,2]...
思路
每次产生一个随机数,和当前数进行交换,可能就是交换本身。这样可以避免重复的随机数问题。
class Solution {
public:
vector<int> m_nums;
vector<int> m_shuffle;
Solution(vector<int>& nums) {
m_nums = nums;
m_shuffle = nums;
}
vector<int> reset() {
return m_nums;
}
vector<int> shuffle() {
int n = (int)m_shuffle.size();
for (int i = 0;i < n;i++) {
int a = rand() % n;
int temp = m_shuffle[a];
m_shuffle[a] = m_shuffle[i];
m_shuffle[i] = temp;
}
return m_shuffle;
}
};
总结
如何高效的随机是个问题,单纯的随机数会随着规模增加,不断重复。
网友评论