解决一些序列问题的算法
例如:
已知一个长度为n的数列,数列中每个数大小各不相同且都
∈[1,n]
。求该数列为n个数字全排列中字典序由小到大排列的第几个。
算法流程:
我们考虑每一个数对这个数列排名的贡献,不妨假设第一个数为x,则它对这个数列排名的贡献是(比它小的数字个数)
∗
(剩余数字可以组成的全排列个数),以此类推将每一个数字的贡献算出并求和,就是我们最终的答案:
p.s.
ai
为当前数在剩余数字中是第几个(从0开始)