计数数组的排列

时间:2018-11-24 15:53:54

标签: algorithm permutation

假设我们有一个长度为z的数组。由x个不同的偶数和y个不同的奇数组成。

所以z = x + y。

我们也知道x => 1总是适用。

第一个问题:长度为z的数组有多少个。那应该是z!很多还是?

第二个问题:有多少个不同的数组,以便数组中的最后一个偶数在奇数索引上。 (此示例中的数组以索引1开头)

示例:

1)[1,2,3,4,5]该数组的长度为5。数组中的最后一个偶数为4,数组中的索引为4,因此我们不计算这样的数组。 / p>

2)[52,3,14]。该数组中的最后一个偶数是14,索引为3。因此,这样的数组会计入它。

3)[52,3,5,7]。该数组中的最后一个偶数是52,索引为1。因此,这样的数组会对其计数。

我只是找不到解决此问题的好方法。特别是,我对动态编程的解决方案感兴趣。

2 个答案:

答案 0 :(得分:0)

第一个问题: 有z!数组,除非数组中有重复的数字。公式如下: n!/(((n1!)(n2!)(n3!) ... (nz!)),其中n1是第一个数字的倍数数组重复,n2第二个数字重复的次数..等等。

答案 1 :(得分:0)

要回答第二个问题,我们只需查看偶数/奇数序列的排列:

eee…eeeooo…ooo
`--,--´`--,--´
   x      y

最后一个e处于奇数位置的数量将仅需乘以偶数(x!)之间的排列数量和奇数。

现在让我们枚举e / o排列:

???????eooo…ooo
`--,--´ `--,--´
  i-1     z-i

对于某些i作为最后一个偶数的索引,有许多数字以i-1个数字开头,由x-1偶数和y - (z-i) = i-x个奇数。您应该能够i循环执行一次,检查x-1 >= 0 && i-x >= 0 && i-x <= y(是否完全有效)以及i是否为奇数,然后对它们中的每一个求和

(i-1)! / (x-1)! / (i-x)!