我们得到由正整数组成的数组'a'和数组'b'。 我如何计算在字典上严格小于数组“ b”的数组“ a”的所有排列?
数组可以包含多达10 ^ 5个整数(正数)
示例:
1 2 3在字典上小于3 1 2
1 2 3在字典上小于1 4 5。
我希望该解决方案使用C ++。
输入:3
1 2 3
2 1 3
输出:2
在字典上,排列1,2,3和1,3,2小于2 1 3
答案 0 :(得分:1)
让我们来解决算法。一旦弄清楚了,实现应该非常简单。看起来像您想要的东西吗?
伪代码:
function get_perms(a,b)
#count the number of digits in a that are <b[0]
count = sum(a<b[0])
Nperms = (len(a)-1)! #modify this formula as needed
N = count*Nperms
if sum(a==b[0]) > 0
remove 1 b[0] from a
# repeat the process with the substring assuming a[0]==b[0]
N += sum(a==b[0])*get_perms(a,b[1:end])
return N
main()
get_perms(a,b)
编辑:我做了一些搜索。我相信this是您要找的东西。