我们有两个长度相等且不为空的整型数组 A 和 B 。
我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。
在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < ... < A[A.length - 1])。
给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的输入总是有效的。
示例:
注意:
思路分析:这道题的确实有点难度,对于分析归纳能力要求挺高的。
刚开始吧,可能大家都想着使用类似贪心策略,就是遇到A[i - 1] >= A[i]这种逆序的时候,我们就将A[i]和B[i]进行交换,这时大家都会被一个测试示例难倒
第一次遇到A[i - 1] >= A[i]时,i = 2,按照贪心策略,我们应该交换A[2]和B[2],交换之后我们又发现A[3]出现了逆序,接着有需要交换A[3]和B[3],所以总共需要两次交换。蛋式这道题只需要交换1次,即我们交换A[1]和B[1]即可同时达到A、B严格递增。因此这种简单的贪心策略行不通。
经过查阅别人的实现,发现了一种动态规划的方法。
现在的问题就是我们如何找到状态转移方程。
Original: https://www.cnblogs.com/wuchanming/p/12237298.html
Author: Jessica程序猿
Title: 使序列递增的最小交换