Leetcode 384. 打乱数组 C++

    技术2024-07-25  72

    Leetcode 384. 打乱数组

    题目

    打乱一个没有重复元素的数组。

    示例:

    // 以数字集合 1, 2 和 3 初始化数组。 int[] nums = {1,2,3}; Solution solution = new Solution(nums); // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。 solution.shuffle(); // 重设数组到它的初始状态[1,2,3]。 solution.reset(); // 随机返回数组[1,2,3]打乱后的结果。 solution.shuffle();

    题解

    shuffle随机生成交换位置即可,另外使用copy数组记录初始状态,以实现reset功能。详细过程见代码

    代码

    class Solution { public: vector<int> ans; vector<int> copy; //备份数组 Solution(vector<int>& nums) { int n = nums.size(); for(int i=0; i<n; i++){ copy.push_back(nums[i]); ans.push_back(nums[i]); } } /** Resets the array to its original configuration and return it. */ vector<int> reset() { int n = ans.size(); for(int i=0; i<n; i++) ans[i] = copy[i]; return ans; } /** Returns a random shuffling of the array. */ vector<int> shuffle() { int n = ans.size(); for(int i=0; i<n; i++){ //随机打乱交换 swap(ans[i],ans[random()%n]); } return ans; } }; /** * 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(); */

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/shuffle-an-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    Processed: 0.010, SQL: 9