当前位置: 首页 > news >正文

LeetCode-384-打乱数组

在这里插入图片描述

1、列表随机

为了能够初始化数组,我们使用nums保存当前的数组,利用orignal保存初始化数组。为了实现等可能随机打乱,考虑到随机数本质上是基于随机数种子的伪随机,我们采用如下的方式实现等可能随机:我们将所有元素压入列表,每次随机选择一个位置上的数字,按顺序将其放入打乱后的数组中,而后我们从列表中删除当前元素。

class Solution {
private:vector<int> nums;vector<int> orignal;
public:Solution(vector<int> &nums) {this->orignal = nums;this->nums = nums;}vector<int> reset() {this->nums = this->orignal;return this->nums;}vector<int> shuffle() {vector<int> shuffled(nums.size());list<int> lst(nums.begin(), nums.end());for (int i = 0; i < nums.size(); ++i) {int j = rand() % (lst.size());auto it = lst.begin();advance(it, j);shuffled[i] = *it;lst.erase(it);}copy(shuffled.begin(), shuffled.end(), nums.begin());return nums;}
};

2、Fisher-Yates 洗牌算法

考虑到方法一中随机打乱的时间复杂度达到O(n2)O(n^2)O(n2),我们可以对随机打乱的方式进行进一步的改进:我们在第i次循环中,在[i,n)[i,n)[i,n)中随机选择一个位置j上的元素将其与位置i上的元素进行交换,如此循环直至n次。这样做能够确保我们在O(n)O(n)O(n)的时间复杂度内实现随机打乱。

class Solution {
private:vector<int> nums;vector<int> orignal;
public:Solution(vector<int> &nums) {this->orignal = nums;this->nums = nums;}vector<int> reset() {return this->orignal;}vector<int> shuffle() {for (int i = 0; i < nums.size(); ++i) {int j = i + rand() % (nums.size() - i);swap(nums[i], nums[j]);}return nums;}
};
http://www.lryc.cn/news/13098.html

相关文章:

  • 九龙证券|重大利好!期货公司打新再“解绑”:可直接参与首发网下配售!
  • 信号完整性设计规则之串扰最小化
  • Windows Ubuntu双系统 设置时间同步方式
  • 【python】英雄联盟电竞观赛引擎 掉落提示 CapsuleFarmerEvolved 「Webhook」「钉钉」
  • 加油站会员管理小程序实战开发教程11
  • Python量化入门:投资的风险有哪些?
  • AV1编码标准整体概述
  • 基于springboot+vue的药物咨询平台
  • 第64章 SQL 主机教程
  • 【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......
  • MathType公式编辑器过期(禁止联网)的解决方案
  • 电子技术——共栅和共源共栅放大器的高频响应
  • 基于jsplumb构建的流程设计器
  • 解析从Linux零拷贝深入了解Linux-I/O(下)
  • 【学习笔记2.19】动态规划、MySQL、Linux、Redis(框架)
  • String intern方法理解
  • 解决 cocosjs与安卓原生集成 崩溃问题
  • spring注解方式整合Dubbo
  • Git详解
  • 003__JAVA模板方法-设计模式
  • Springboot项目集成Netty组件
  • python 中的import cfg问题
  • [oeasy]python0088_字节_Byte_存储单位_KB_MB_GB_TB
  • vue3.0 生命周期
  • CGAL 数字类型
  • 如何将Python打包后的exe还原成.py?
  • CJSON简单介绍
  • 算法训练营 day49 动态规划 爬楼梯 (进阶)零钱兑换 完全平方数
  • Vue:extends继承组件复用性
  • ChatGPT 的一些思考