Linear Time Algorithm