[leetcode] 384. Shuffle an Array 解题报告

63 篇文章 0 订阅
46 篇文章 0 订阅
这篇博客探讨了LeetCode第384题的解决方案,即如何对一个无重复元素的数组进行混淆操作。作者提出通过遍历数组并在每个元素处随机选择一个起始位置与其交换,以确保每个元素平均有1/n!的概率出现在数组的任一位置。详细代码实现也在文中给出。
摘要由CSDN通过智能技术生成

题目链接: https://leetcode.com/problems/shuffle-an-array/

Shuffle a set of numbers without duplicates.

Example:

// Init an array with set 1, 2, and 3.
int[] nums = {1,2,3};
Solution solution = new Solution(nums);

// Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned.
solution.shuffle();

// Resets the array back to its original configuration [1,2,3].
solution.reset();

// Returns the random shuffling of array [1,2,3].
solution.shuffle();

思路: 在随机产生一个序列的时候, 遍历每一个元素, 并且随机一个从他开始的位置与这个位置交换, 这样任意一个元素随机到任意一个位置的概率都是1/n!.

代码如下:

class Solution {
public:
    Solution(vector<int> nums):vec(nums) {
        
    }
    
    /** Resets the array to its original configuration and return it. */
    vector<int> reset() {
        return vec;
    }
    
    /** Returns a random shuffling of the array. */
    vector<int> shuffle() {
        if(vec.size()==0) return {};
        vector<int> tem(vec);
        int len = vec.size();
        for(int i = 0; i < len; i++)
        {
            int pos = rand()%(len-i);
            swap(tem[i+pos], tem[i]);
        }
        return tem;
    }
private:
    vector<int> vec;
};

/**
 * 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();
 */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值