从N个数中随机取一个数放在第一个位置

从剩下N-1个数中随机取一个数放在第二个位置。

依次放完每一个数。

可以证明每个位置每个数都是等可能出现的。

可以用数学证明,也可以用递归解释。

class Solution {

public:

vector original_nums;

vector current_nums;

Solution(vector& nums) {

original_nums = nums;

current_nums = nums;

}

/** Resets the array to its original configuration and return it. */

vector reset() {

return original_nums;

}

/** Returns a random shuffling of the array. */

vector shuffle() {

int n = current_nums.size();

for(int i=0;i

swap(current_nums[i],current_nums[random()%(n-i)]);

}

return current_nums;

}

};

/**

* Your Solution object will be instantiated and called as such:

* Solution* obj = new Solution(nums);

* vector param_1 = obj->reset();

* vector param_2 = obj->shuffle();

*/

Java打乱牌的算法_Leetcode 384. 打乱数组 (洗牌算法)相关推荐

  1. 数组洗牌算法-shuffle

    数组洗牌,最近直接的想法是从数组随机取出一个元素,放到另一个数组中,但是这样取出的元素会有重复,必须采取一定的方法保证: 1. 元素不能重复 2. 元素被抽取的概率相等,即随机性 数组洗牌经典算法有两 ...

  2. Java斗地主算法的设计与实现_斗地主算法的设计与实现–洗牌和发牌

    本篇将给出斗地主算法的源码,介绍斗地主这个项目的一些基本情况. 下载地址:http://download.csdn.net/detail/fansunion/6387589 特别说明:斗地主项目的主要 ...

  3. 等概率随机取数算法的几种实现(洗牌算法)

    等概率随机取数算法的几种实现 最近读了项目中的工具脚本,发现一个随机取数的函数,功能大概是从M个数中不重复的随机取出N个数,算是数组随机排序然后取前N个值的变种. 脚本实现采取原始的方法,每随机取一个 ...

  4. 【Java】 实现一副扑克牌,包含:洗牌+发牌(3个人,一人5张)+输出牌的信息 的逻辑

    import java.util.ArrayList; import java.util.List; import java.util.Random;class Card{private int ra ...

  5. java练习:模拟试下你斗地主的洗牌、发牌、看牌功能

    /*** 需求:模拟实现斗地主的分牌情形* 分析: 1 模拟牌盒,存储54张牌,0-53 每个数字分别对应一张牌,用Map存储* 2 将0-53序号随机分发到三个人手中,欲实现序号的随机排序,考虑使用 ...

  6. 程序员的算法趣题Q50: 完美洗牌

    目录 1. 问题描述 2. 解题分析 2.1 思路1 2.2 思路2 3. 代码及测试 4. 后记 1. 问题描述 问题:对2n张牌洗牌,并求当1<=n<=100时,一共有多少个n可以使得 ...

  7. 数组洗牌 Fisher Yates

    看播放器代码时发现的这个洗牌算法,再网上查了一番 作用是把数组变成随机序列,原理类似于从牌堆A中随机抽牌放进牌堆B 代码1:  返回一个由(数组下标)组成的数组 function random(len ...

  8. c语言洗牌发牌结构体,C语言实现洗牌发牌小程序

    本文实例为大家分享了C语言实现洗牌发牌小程序的具体代码,供大家参考,具体内容如下 构建一副扑克牌,并实现洗牌发牌. 代码 #include #include #include #define NUM ...

  9. golang 切片 数组 洗牌

    包 math/rand 中的 rand.Shuffle 函数使用给定的交换函数对输入序列进行混洗. a := []int{1, 2, 3, 4, 5, 6, 7, 8} rand.Seed(time. ...

最新文章

  1. js判断输入是否为正整数、浮点数等数字的函数代码
  2. MYSQL常用命令(转载)
  3. POJ 3801/HDU 3157 Crazy Circuits | 有下界的最小流
  4. android 保存联系人,保存android联系后获取联系人ID
  5. 如何解除FSO上传程序小于200k限制?
  6. javascript arraybuffer
  7. 如何做数据库分页查询
  8. Linux shell 上机编程-----习题
  9. [UI] 精美UI界面欣赏[11]
  10. 1208_MISRA_C规范学习笔记_Rule 10.3 Rule 10.5
  11. java自定义对象集合排序
  12. 怎样使计算机桌面有励志壁纸,适合电脑的高清励志桌面壁纸
  13. 山大中心校区计算机课在哪,山东大学有几个校区,哪个校区最好及各校区介绍...
  14. 红蜘蛛,极域,伽卡他卡,传奇电子教室的破解(源代码)
  15. 双云台AI智能分析跟踪会议云台摄像机技术应用
  16. python中hasattr,getattr,setattr的区别
  17. Linux技术(1)--CentOS 6.5关闭防火墙步骤
  18. 在.NET中隐藏带有只读Web路径的Web shell
  19. 沪嘉杭共建G60科创走廊
  20. 一元流量参数为null_了解JavaScript中null和undefined之间的差异和相似之处

热门文章

  1. Python编程基础:第二十三节 嵌套函数调用Nested Functions Calls
  2. 每秒处理10万订单乐视集团支付架构--转
  3. Spring 3.1 Environment Profiles--转载
  4. 多台Linux服务器SSH相互访问无需密码--转
  5. Device eth0 does not seem to be present, delaying initialization.转载
  6. 美团点评业务风控系统构建经验
  7. java面向对象思想如何理解
  8. APM - Prometheus监控系统初探
  9. 深入理解分布式技术 - Paxos 算法解读
  10. Spring-AOP 引介切面