gpt4 book ai didi

arrays - 对两个数组进行排序所需的最小 "swaps"数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:33 24 4
gpt4 key购买 nike

这是一个具有挑战性的问题,我一直在以最佳方式解决问题 (my attempt with failure analysis)。

给定两个长度相等的数组 A = [1,8,12,11], B = [7,3,10,15],仅通过交换对它们进行升序排序。

A swap 表示用相应的 B 元素替换 A 中索引为 i 的元素,反之亦然。

上面的例子可以解析为 A = [1,3,12,15], B = [7,8,10,11] 或者 A = [1,3, 10,11], B = [7,8,12,15] 均有 2 次交换。然而,在某些情况下,解决方案的交换次数不同,这里选择最小值,如果不可能,则返回 -1

我将如何在 O(N) 中完美地解决这个问题?

最佳答案

f(i, swap) 表示可达到索引 i 的最小交换次数,其中 swap 是一个 bool 值,表示是否索引 i 处的元素将被交换。然后:

f(i, false) = min(
f(i - 1, false) if A[i] >= A[i-1] and B[i] >= B[i-1] else Infinity,

f(i - 1, true) if A[i] >= B[i-1] and B[i] >= A[i-1] else Infinity
)

f(i, true) = min(
1 + f(i - 1, false) if B[i] >= A[i-1] and A[i] >= B[i-1] else Infinity,

1 + f(i - 1, true) if B[i] >= B[i-1] and A[i] >= A[i-1] else Infinity
)

关于arrays - 对两个数组进行排序所需的最小 "swaps"数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49368332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com