1 class Solution {
 2 private:
 3     vector<int> vi;
 4
 5 public:
 6     Solution(vector<int>& nums) {
 7         vi = nums;
 8     }
 9
10     /** Resets the array to its original configuration and return it. */
11     vector<int> reset() {
12         return vi;
13     }
14
15     int randnum(int left, int right){
16         //srand(int(time(0)));
17         int k = rand()%(right-left);
18         return k + left;
19     }
20
21     /** Returns a random shuffling of the array. */
22     vector<int> shuffle() {
23         vector<int> cur=vi;
24         int sz = cur.size();
25         for(int i=0;i<sz;i++)
26             swap(cur[i], cur[randnum(i, sz)]);
27
28         return cur;
29     }
30 };
31
32 /**
33  * Your Solution object will be instantiated and called as such:
34  * Solution* obj = new Solution(nums);
35  * vector<int> param_1 = obj->reset();
36  * vector<int> param_2 = obj->shuffle();
37  */

 从第一个数开始遍历,假设数组长度为n,下标为0~n-1

遍历到下标为i的数时,随机生成一个[i,n-1]的数字s,交换num[i]和num[s]

遍历完成,即生成了一个随机序列。

01-21 12:14
查看更多