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, Bare 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 { |