How to find the kth smallest element in the union of two sorted arrays?

You’ve got it, just keep going! And be careful with the indexes…

To simplify a bit I’ll assume that N and M are > k, so the complexity here is O(log k), which is O(log N + log M).

Pseudo-code:

i = k/2
j = k - i
step = k/4
while step > 0
    if a[i-1] > b[j-1]
        i -= step
        j += step
    else
        i += step
        j -= step
    step /= 2

if a[i-1] > b[j-1]
    return a[i-1]
else
    return b[j-1]

For the demonstration you can use the loop invariant i + j = k, but I won’t do all your homework 🙂

Leave a Comment