假设我们有一组元素 nums。我们必须按非递减顺序对它们进行排序。但是排序技术是随机的。我们将检查数组是否已排序,如果没有,则将其随机洗牌并再次检查。直到所有元素都被排序,继续这个过程。在这种情况下,我们必须找到对它们进行排序所需的预期随机数。显示最多 6 位小数的答案。
所以,如果输入像 nums = [5,2,7],那么输出将是 6,因为有 3 种可能的排列,所以概率是 1/3
如果我们在 i = 1 次迭代时得到排序数组,那么它将需要 1/3
如果我们在 i = 2 次迭代时得到排序数组,那么它将需要 (2/3)*(1/3)
如果我们在第 i 次迭代时得到排序数组,那么它将需要 (2/3)^(i-1) * (1/3)
让我们看看以下实现以获得更好的理解 -
from math import factorial def solve(nums): if nums == sorted(nums): return 0 else: m={} for i in nums: if i in m: m[i]+=1 else: m[i]=1 num=1 for i in m: num *= factorial(m[i]) den=factorial(len(nums)) return round((den/num),6) nums = [5,2,7] print(solve(nums))
[5,2,7]输出结果
6.0