leetcode 384打乱数组
刚开始看到这个题有点懵逼,因为格式有点复杂。后来发现这个题的问题在于如何将一个数组内的元素均匀的打乱,并且所有种类个数为n!个。所采用的洗牌算法为前n个数中随机挑选一个和第n个数交换,之后为前n-1个数中随机挑选一个数与第n-1个数交换,直至最后。贴代码
class Solution { private: vector<int> original; public: Solution(vector<int>& nums) { original = nums; } /** Resets the array to its original configuration and return it. */ vector<int> reset() { return original; } /** Returns a random shuffling of the array. */ vector<int> shuffle() { vector<int> nums(original); //用原数组来初始化新数组 for (int i = nums.size() - 1; ~i; i -- ) //从后往前遍历 { swap(nums[i], nums[rand() % (i + 1)]); //rand()能随机生成0到最大随机数的任意整数 } //rand() % (i + 1)能随机生成0到i中的任意整数 return 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(); */

浙公网安备 33010602011771号