https://medium.com/@slicesharpy/understanding-the-3-sum-problem-from-naive-to-optimal-solution-a5f71149c27a