LeetCode 801. Minimum Swaps To Make Sequences Increasing
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.
1 | 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,如果array长度为n,那么使用2行n列的二维DP。dp[0][i]
保存i
位置没有交换的步数,dp[1][i]
保存i
位置交换了的最小步数。与i-1
位置的情况组合之后有四种情况。但是实际上只有两种:
- 在
i-1
位置没有交换的情况下i
位置不需要交换;i-1
和i
位置都进行了交换。这两种情况都是A
和B
的i
元素分别大于i-1
元素。 - 如果
A
或B
中有一个不满足递增,那么就要交换,分为i-1
交换和i
交换两种。
1 | class Solution { |