您的位置:首页 > 编程语言 > Python开发

其他题目---从N个数中等概率打印M个数

2017-10-30 14:47 106 查看
【题目】

  给定一个长度为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,因为打印过的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个数

  总之,就是把随机选出来的数打印出来,然后将打印的数交换到范围中的最后位置,再把范围缩小,使得被打印的数下次不可能再被选中,直到打印结束。

[b]【代码实现】


#python3.5
def 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 算法