(随机)384. 打乱数组

384. 打乱数组

Fisher-Yates算法
红色箭头是随机挑到的,蓝色箭头是当前下标,需要蓝色和红色箭头的元素互换,然后蓝色跳到下一个。

题解

class Solution {
public:
    vector<int> arr;

    Solution(vector<int> &nums) {
        arr = nums;
    }

    /** Resets the array to its original configuration and return it. */
    vector<int> reset() {
        return arr;
    }

    /** Returns a random shuffling of the array. */
    vector<int> shuffle() {
        vector<int> tmp = arr;
        vector<int> res(arr.size());
        for (int i = 0; i < tmp.size(); i++) {
            int sz = tmp.size() - i;
            int idx = rand() % sz;
            swap(tmp[i], tmp[i + idx]);
            res[i] = tmp[i];
        }
        return res;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容