JSFiddle - React, Tailwind, and code Playground

JavaScript

var U = [6,1,5,3,4];
var S = [1,2,4,9,3,7,5];

var A = [null].concat(U.filter(function(x) { return S.indexOf(x) >= 0; }));
var B = [null].concat(S.filter(function(x) { return U.indexOf(x) < 0; }));
var n = A.length - 1, m = B.length - 1;

// build DP array
var f = [], next = []
for (var i = 0; i <= n; ++i) {
    f[i] = [];
    next[i] = [];
}
for (var j = 0; j <= m; ++j) {
    f[0][j] = 0;
    next[0][j] = 2;
}
for (var i = 1; i <= n; ++i) {
    f[i][0] = f[i-1][0];
    next[i][0] = 1;
    for (var k = 1; k < i; ++k)
        if (S.indexOf(A[i]) < S.indexOf(A[k]))
            f[i][0]++;
    for (var j = 1; j <= m; ++j) {
        var x = f[i-1][j];
        for (var k = 1; k < i; ++k) 
            if (S.indexOf(A[i]) < S.indexOf(A[k]))
                x++;
        for (var k = 1; k <= j; ++k) 
            if (S.indexOf(A[i]) < S.indexOf(B[k]))
                x++;
        var y = f[i][j-1];
        for (var k = 1; k <= i; ++k) 
            if (S.indexOf(B[j]) < S.indexOf(A[k]))
                y++;
        for (var k = 1; k < j; ++k) 
            if (S.indexOf(B[j]) < S.indexOf(B[k]))
                y++;
        next[i][j] = (x<y) ? 1 : 2;
        f[i][j] = Math.min(x, y);
    }
}

// reconstruct solution
var res = [];
var i = n, j = m;
while (i > 0 || j > 0) {
    if (next[i][j] == 1) {
        res.push(A[i]);
        i--;
    } else {
        res.push(B[j]);
        j--;
    }
}
res.reverse();
console.log(res);