Linear-time algorithm