其他题目---从N个数中等概率打印M个数
来源:互联网 发布:大数据用什么数据库 编辑:程序博客网 时间:2024/06/03 21:58
【题目】
给定一个长度为N且没有重复元素的数组arr和一个整数m,实现函数等概率随机打印arr中的M个数。
【要求】
- 相同的数不要重复打印
- 时间复杂度O(M),空间复杂度O(1)
- 可以改变arr数组
【基本思路】
具体过程如下:
1、在arr[0…N-1]中随机得到一个位置a,然后打印arr[a]。
2、把arr[a]和arr[N-1]交换。
3、在arr[0…N-2]中随机得到一个位置b,然后打印arr[b],因为打印过的arr[a]已经被换到了N-1位置,所以这次打印不可能在出现。
4、把arr[b]和arr[N-2]交换。
5、在arr[0…N-3]中随机得到一个位置c,然后打印arr[c],因为打印过的arr[a]和arr[b]已经被换到了N-1位置和N-2位置,所以这次打印不可能在出现。
6、依次类推直到打印M个数
总之,就是把随机选出来的数打印出来,然后将打印的数交换到范围中的最后位置,再把范围缩小,使得被打印的数下次不可能再被选中,直到打印结束。
【代码实现】
#python3.5def printRandM(arr, m): if arr == None or len(arr) == 0 or len(arr) < m or m < 1: return res = 0 n = len(arr) while res < m: index = int(random.random() * n) print(arr[index], end=' ') arr[index], arr[n-1] = arr[n-1], arr[index] n -= 1 res += 1
阅读全文
2 0
- 其他题目---从N个数中等概率打印M个数
- Tricks(二十)—— 从 N 个数中等概率地产生 M 个数
- 从未知大小的n个数中取m个数,使各数被取出的概率相等
- 等概率无重复的从n个数中选取m个数
- 等概率无重复的从n个数中选取m个数
- 等概率无重复的从n个数中选取m个数
- 打印从n个数中选取m个数的组合数
- 打印从n个数中选取m个数的组合数
- 从1到m随机n个数
- 从m个数中选n个数的排列
- 随机数算法之从N个数中取M个数
- 从m个数中任意去n个数的组合
- 从1-n中选择m个数的组合个数
- 从N个数选择M个数的排列
- 输出从n个数中选m个数的所有组合
- 从N个数总随机选出M个数
- OC----从N个数中选取M个数的组合
- 从n个数中选取m个数的所有组合
- Vue.js开发环境搭建的介绍
- 把自己坑的Could not invoke service..
- 数据中心标准旨在实现OCP未能实现的功能
- mysql计算两个日期之间的时间差
- 2017第十六届浙江(杭州)装备制造业博览会会刊(参展商名录)
- 其他题目---从N个数中等概率打印M个数
- okHttp封装
- iptables实现网络防火墙(一)
- 图解phpstorm常用快捷键
- JavaThink读书笔记
- 【深入浅出事务】:MySQL事务的隔离级别(超详细)
- 2017第七届中国SEO排行榜大会——上海站
- 走进Linux——常用Linux操作命令
- java计算两个日期相差的天数