Use two pointers to traverse data from both ends or at different speeds, solving pair-based problems in O(n).