Description
We have two integer sequences A and B of the same non-zero length.
We are allowed to swap elements A[i] and B[i]. Note that both elements are in the same index position in their respective sequences.
At the end of some number of swaps, A and B are both strictly increasing. (A sequence is strictly increasing if and only if A[0] < A[1] < A[2] < … < A[A.length - 1].)
Given A and B, return the minimum number of swaps to make both sequences strictly increasing. It is guaranteed that the given input always makes it possible.
Example:
Note:
- A, B are arrays with the same length, and that length will be in the range [1, 1000].
- A[i], B[i] are integer values in the range [0, 2000].
分析
题目的意思是:求使两个序列递增的最小交换次数。
用二维DP来计算:
- dp[i][0]表示不交换i,使得[0, i]严格递增的最小swap数
- dp[i][1]表示交换i,使得[0, i]严格递增的最小swap数
- 再看状态转移方程,在每一步判断,我们要不要交换,A[i-1]<B[i]&&B[i-1]<A[i]时这个是必须要交换的;而A[i-1]<A[i]&&B[i-1]<B[i]也可以交换,也可以不交换。
代码
参考文献
801. Minimum Swaps To Make Sequences Increasing