【发布时间】:2025-11-26 02:35:01
【问题描述】:
问题
我有两个整数数组A[] 和B[]。数组B[] 是固定的,我需要找到A[] 的排列,它在字典上小于B[],并且排列最接近B[]。我的意思是:
对于 i in (0 A[] 应该小于
B[]lexiographically。
例如:
A[]={1,3,5,6,7}
B[]={7,3,2,4,6}
所以,A[] 到 B[] 的最接近排列可能是
A[]={7,3,1,6,5}
我的方法
尝试A[] 的所有排列,然后将其与B[] 进行比较。但是时间复杂度是(n! * n)
那么有没有办法优化呢?
编辑
n 可以和10^5 一样大
【问题讨论】:
-
我认为这个问题可以使用动态规划来解决。在使用 O(2^n * n) 空间时,时间复杂度可以优化到 O(2^n * n^2)。
-
n 可以大到 10^5
-
@ruakh 你是对的我会编辑我的问题
-
您能描述一下如何计算排列与 B 的距离吗?
-
好的,根据您的图片,您希望 B 的字典前身仅由 A 的元素组成。我建议更正 abs(B[i]-A[i]) 东西,因为这意味着偏差的元素定义。我有一个代码解决方案给你,但只能稍后发布。