Java打乱牌的算法_Leetcode 384. 打乱数组 (洗牌算法)
从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. 打乱数组 (洗牌算法)相关推荐
- 数组洗牌算法-shuffle
数组洗牌,最近直接的想法是从数组随机取出一个元素,放到另一个数组中,但是这样取出的元素会有重复,必须采取一定的方法保证: 1. 元素不能重复 2. 元素被抽取的概率相等,即随机性 数组洗牌经典算法有两 ...
- Java斗地主算法的设计与实现_斗地主算法的设计与实现–洗牌和发牌
本篇将给出斗地主算法的源码,介绍斗地主这个项目的一些基本情况. 下载地址:http://download.csdn.net/detail/fansunion/6387589 特别说明:斗地主项目的主要 ...
- 等概率随机取数算法的几种实现(洗牌算法)
等概率随机取数算法的几种实现 最近读了项目中的工具脚本,发现一个随机取数的函数,功能大概是从M个数中不重复的随机取出N个数,算是数组随机排序然后取前N个值的变种. 脚本实现采取原始的方法,每随机取一个 ...
- 【Java】 实现一副扑克牌,包含:洗牌+发牌(3个人,一人5张)+输出牌的信息 的逻辑
import java.util.ArrayList; import java.util.List; import java.util.Random;class Card{private int ra ...
- java练习:模拟试下你斗地主的洗牌、发牌、看牌功能
/*** 需求:模拟实现斗地主的分牌情形* 分析: 1 模拟牌盒,存储54张牌,0-53 每个数字分别对应一张牌,用Map存储* 2 将0-53序号随机分发到三个人手中,欲实现序号的随机排序,考虑使用 ...
- 程序员的算法趣题Q50: 完美洗牌
目录 1. 问题描述 2. 解题分析 2.1 思路1 2.2 思路2 3. 代码及测试 4. 后记 1. 问题描述 问题:对2n张牌洗牌,并求当1<=n<=100时,一共有多少个n可以使得 ...
- 数组洗牌 Fisher Yates
看播放器代码时发现的这个洗牌算法,再网上查了一番 作用是把数组变成随机序列,原理类似于从牌堆A中随机抽牌放进牌堆B 代码1: 返回一个由(数组下标)组成的数组 function random(len ...
- c语言洗牌发牌结构体,C语言实现洗牌发牌小程序
本文实例为大家分享了C语言实现洗牌发牌小程序的具体代码,供大家参考,具体内容如下 构建一副扑克牌,并实现洗牌发牌. 代码 #include #include #include #define NUM ...
- golang 切片 数组 洗牌
包 math/rand 中的 rand.Shuffle 函数使用给定的交换函数对输入序列进行混洗. a := []int{1, 2, 3, 4, 5, 6, 7, 8} rand.Seed(time. ...
最新文章
- js判断输入是否为正整数、浮点数等数字的函数代码
- MYSQL常用命令(转载)
- POJ 3801/HDU 3157 Crazy Circuits | 有下界的最小流
- android 保存联系人,保存android联系后获取联系人ID
- 如何解除FSO上传程序小于200k限制?
- javascript arraybuffer
- 如何做数据库分页查询
- Linux shell 上机编程-----习题
- [UI] 精美UI界面欣赏[11]
- 1208_MISRA_C规范学习笔记_Rule 10.3 Rule 10.5
- java自定义对象集合排序
- 怎样使计算机桌面有励志壁纸,适合电脑的高清励志桌面壁纸
- 山大中心校区计算机课在哪,山东大学有几个校区,哪个校区最好及各校区介绍...
- 红蜘蛛,极域,伽卡他卡,传奇电子教室的破解(源代码)
- 双云台AI智能分析跟踪会议云台摄像机技术应用
- python中hasattr,getattr,setattr的区别
- Linux技术(1)--CentOS 6.5关闭防火墙步骤
- 在.NET中隐藏带有只读Web路径的Web shell
- 沪嘉杭共建G60科创走廊
- 一元流量参数为null_了解JavaScript中null和undefined之间的差异和相似之处
热门文章
- Python编程基础:第二十三节 嵌套函数调用Nested Functions Calls
- 每秒处理10万订单乐视集团支付架构--转
- Spring 3.1 Environment Profiles--转载
- 多台Linux服务器SSH相互访问无需密码--转
- Device eth0 does not seem to be present, delaying initialization.转载
- 美团点评业务风控系统构建经验
- java面向对象思想如何理解
- APM - Prometheus监控系统初探
- 深入理解分布式技术 - Paxos 算法解读
- Spring-AOP 引介切面