First implementation, similar to 2Sum, use two pointers