Leetcode 819 Solution

This article provides solution to leetcode question 819 (minimum-swaps-to-make-sequences-increasing)

https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing

Solution

class Solution {
public:
    int minSwap(vector<int>& A, vector<int>& B) {
        int n = A.size();

        if (n == 0)
            return 0;

        vector<int> dp1(n, INT_MAX);
        vector<int> dp2(n, INT_MAX);

        dp1[0] = 0;
        dp2[0] = 1;

        for (int i = 1; i < n; i++)
        {
            if (A[i] > A[i - 1] && B[i] > B[i - 1])
                dp1[i] = min(dp1[i - 1], dp1[i]);

            if (A[i] > B[i - 1] && B[i] > A[i - 1])
                dp1[i] = min(dp2[i - 1], dp1[i]);

            if (B[i] > A[i - 1] && A[i] > B[i - 1])
                dp2[i] = min(dp1[i - 1] + 1, dp2[i]);

            if (B[i] > B[i - 1] && A[i] > A[i - 1])
                dp2[i] = min(dp2[i - 1] + 1, dp2[i]);
        }

        return min(dp1[n - 1], dp2[n - 1]);
    }
};