Greedy Algorithms8 sections · 316 units
Open in Course

Couples - Implementation

The code

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: O(n)O(n). Space: O(n)O(n) for position array.

The XOR trick: if person is even, partner is odd (person+1). If odd, partner is even (person-1). XOR with 11 handles both cases.