Here is the solution:
function minSwapsCouples(row)
n := length of row
pos := array where pos[person] = index
for i from 0 to n - 1
pos[row[i]] := i
swaps := 0
for i from 0 to n - 1 step 2
person := row[i]
partner := person XOR 1
if row[i + 1] != partner then
j := pos[partner]
// swap row[i+1] and row[j]
pos[row[i + 1]] := j
pos[partner] := i + 1
row[j] := row[i + 1]
row[i + 1] := partner
swaps := swaps + 1
return swaps
Time: . Space: for position array.
The XOR trick: if person is even, partner is odd (person+1). If odd, partner is even (person-1). XOR with handles both cases.