Well, the rigorous solution is to try every nut with every bolt, and use the ones that work, ignoring the extra information you have of knowing whether a nut is too small or too large for the bolt.

That would run in O(N^2) time. So when the question says "describe an efficient algorithm", it wants something better than the obvious.

That would run in O(N^2) time. So when the question says "describe an efficient algorithm", it wants something better than the obvious.