[Simple] 洗牌算法

2023-05-16

题目要求:

平时洗牌是两打牌,交叉洗在一起.
也就是开始 1 2 3 4 5 6 7 8
第一次 1 5 2 6 3 7 4 8
第二次 1 3 5 7 2 4 6 8
。。。
第k次 ...

给你一个数组a[2N],要求在O(1)的空间复杂度内给a[2N]k次洗牌.


解决方案:

首先寻找规律,有如下性质:

1> 最开始和最后的两张牌永远不变

2> 中间有2N-2张牌,即一张牌最多可能有2N-2种位置,这2N-2张牌一定是全动,即不可能存在两个状态,
   它们的一部分相同,而另一部分不同。这条性质说明了洗牌会进入循环,并且循环节最大为2N-2。

3> 将除去1以后剩下的2N-1张牌看成是一个循环圈,就是说超出2N-1就从循环圈的开始数,那么,
   第一次洗牌,2向后移动1个位置,3向后移动2个位置,……
   第二次洗牌,2向后移动2个位置,3向后移动4个位置,……
   ……
   第k次洗牌,2向后移动2^k - 1个位置,3向后移动2*(2^k-1)个位置,4向后移动3*(2^k-1)个位置……
                        2N-1向后移动(2N-2)*(2^k-1)个位置。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Simple] 洗牌算法 的相关文章

随机推荐

  • Android studio 按ctrl+v变成insert的解决办法

    Android studio 按ctrl 43 v变成insert的解决办法 Mac版 android studio 竖线的光标突然变成了矩形 解决方法 xff1a File Settings Editor General Apperanc
  • Windows Server2012多远程桌面配置

    一 配置相关信息 1 win 43 R 输入gpedit msc 计算机配置 管理模板 windows组件 远程桌面服务 远程桌面会话主机 连接 2 将远程桌面服务限制到单独的远程桌面会话禁用 3 启用拒绝将已登录到控制台的管理员注销 不启
  • Android屏幕适配dp、px两套解决办法

    最新最全文章 2018 08 25 xff1a Android dp方式的屏幕适配 原理 后期补充完整讲解 手机dp输出是横屏还是竖屏 android阿杜的博客 CSDN博客 又是屏幕适配 xff0c 这类文章网上不是很多了吗 xff1f
  • Android项目构建变体不能切换打包debug模式和release模式

    Android项目build variants不能切换打包debug模式和release模式 xff0c 不能切换active abi类型 我的项目发现的原因 xff1a 就是项目文件夹名称 xff0c 和包名不同 xff0c 如包名写的是
  • Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: ... has no certificates at entry AndroidManifest.xml]

    很长一段时间都用快速打包 packer ng plugin xff0c 没注意到底用Android Studio打包会有什么区别 xff0c 今天写了个demo xff0c 居然发现我输入了签名之后只有一次是安装成功的 xff0c 后边都是
  • Mac顶部菜单栏(Menubar)卡死

    升级了Mojave后 xff0c Mac pro 2015 early 顶部菜单栏经常卡死 重启菜单栏 xff08 Menubar xff09 笔者接下来分享两种常见的重启菜单栏的方法 方法一 xff1a 使用活动监视器 打开 OS X 预
  • 计算机专业术语大全(中~英文版)

    AGP Accelerated Graphics Port xff0d 图形加速接口 Access Time xff0d 存取时间 Address 地址 ANSI American National Standards Institute
  • hdfs 的启动

    xff08 1 xff09 先配置文件 修改 core site xml 如下 修改 hdfs site xml 如下 xff1a lt configuration gt lt property gt lt name gt dfs repl
  • Matlab并行化计算

    Matlab并行化计算及GPU计算教程 前置要求和设置 要求电脑CPU有超过2个核心 xff0c 内存大于2G 建议先调试好代码 xff0c 再进行并行化计算 查看并行化计算工具箱版本 gt gt gt ver parallel MATLA
  • 程序员怎么写情书

    今天 xff0c 我们再写一封情书去求爱 Dear xff0c 99669999996669999996699666699666999966699666699 9969999999969999999969966669966996699669
  • 解包Android的boot.img

    我們知道Adnroid的Boot img包其實就是就是把kernel和ramdisk img再加一個page的頭碼成的 其結構就如下所示 43 43 boot header 1 page 43 43 kernel n pages 43 43
  • 制作自己的个人博客网站

    拥有一个私人的博客是一件很酷的事情 xff0c 私以为有想法的同学都应该有个博客 xff0c 就像日记一样 xff0c 写写自己的经历 xff0c 感悟等 我也在B站上花费了好多时间 xff0c 终于找到了一个特别简单易行的 xff0c 感
  • 利用shell模拟linux远程登陆

    目录 1前期准备 2编写shell脚本 3测试 最近几天学习了redis及shell脚本开发 xff0c 突然想到写一个shell脚本模拟linux远程登录 前期准备 在redis中创建用户信息 设置用户账号及密码 hset account
  • DirectX修复教程

    DirectX修复教程 问题 当我们玩游戏 xff08 如绝地求生 极品飞车 FIFA等 xff09 或使用工业软件 xff08 如3ds Max Maya Autodesk系列等 xff09 时 xff0c 可能会遇到0xc000007b
  • Vue[eslint-rules配置]:解决Vue中 eslint 语法检测报错或报错改成警告 // eslint-disable-next-line to ignore the next line.

    Es lint语法严格 很多时候 在Vue中本身不应该是错的写法 在es lint下会保证代码的严谨性友好的给一个error错误 如v for的 key等 解决方法 在package json中对eslintConfig进行配置 即修改或新
  • C语言——生产者消费者问题

    百度文献查看原文 核心代码 xff1a span class token macro property span class token directive keyword include span span class token str
  • virtualbox headless 安装使用 后台运行

    公司配备的电脑太烂了 xff0c DDR2的主机简直没法说 xff0c 安装好mint xff0c 再启动eclipse基本什么其他想法都不要有了 xff0c 只好想办法扩展计算机的能力了 xff0c 还好手头有个测试server可以使用
  • windows10升级windows11后微信等软件无法连接网络

    1 同时按住 win 43 X 快捷键 xff0c 选择windows powerShell xff08 管理员 xff09 命令提示符 xff08 管理员 xff09 xff0c 会出现第二步骤页面 2 在出现的页面输入 netsh wi
  • smb连接错误“请检查服务器名称或IP地址,然后再试一次,如果问题持续发生,请联系系统管理员“

    问题 公司内部的共享服务器突然访问不了了 xff08 iMac访问Windows共享 xff09 提示错误 请检查服务器名称或IP地址 xff0c 然后再试一次 xff0c 如果问题持续发生 xff0c 请联系系统管理员 经过试验 xff0
  • [Simple] 洗牌算法

    题目要求 xff1a 平时洗牌是两打牌 xff0c 交叉洗在一起 也就是开始 1 2 3 4 5 6 7 8 第一次 1 5 2 6 3 7 4 8 第二次 1 3 5 7 2 4 6 8 第k次 给你一个数组a 2N xff0c 要求在O