3Sum (LC-0015)

class Solution:
    def threeSum(self, nums):
        nums.sort()
        N = len(nums)
        res = []
        for ix in range(N - 2):
            if ix > 0 and nums[ix - 1] == nums[ix]:
                continue
            jx = 1 + ix
            kx = N - 1
            while jx < kx:
                s = nums[ix] + nums[jx] + nums[kx]
                if s < 0:
                    while jx < kx and nums[jx] == nums[jx + 1]:
                        jx = jx + 1
                    jx = jx + 1
                elif s > 0:
                    while jx < kx and nums[kx] == nums[kx - 1]:
                        kx = kx - 1
                    kx = kx - 1
                else:
                    res.append([
                        nums[ix],
                        nums[jx],
                        nums[kx]
                    ])
                    while jx < kx and nums[kx] == nums[kx - 1]:
                        kx = kx - 1
                    kx = kx - 1
        return res