Python中3Sum的使用

假设我们有一个数字数组。它存储n个整数,数组中有元素a,b,c,这样a + b + c =0。找到满足情况的数组中的所有唯一三元组。因此,如果数组类似于[-1,0,1,2,-1,-4],则结果将为[[-1,1,0],[-1,-1,2]]

为了解决这个问题,我们将遵循以下步骤-

  • 对数组num进行排序,并定义数组res

  • 对于0到num的长度范围内的i – 3

    • sum:= nums [i],nums [l]和nums [r]的总和

    • 如果sum <0,则l:= l + 1,否则,当sum> 0时,则r:= r – 1

    • 否则将nums [i],nums [l],nums [r]插入res数组

    • 而l <num的长度– 1和nums [l] = nums [l +1]

    • 而r> 0且nums [r] = nums [r-1]

    • 将l增加1并将r减少1

    • 使我增加1

    • 将r减1

    • 如果i> 0并且nums [i] = nums [i-1],则跳过下一部分并继续

    • l:= i + 1和r:= nums的长度– 1

    • 当l <r

    • 返回资源

    示例(Python)

    让我们看下面的实现以更好地理解-

    class Solution(object):
       def threeSum(self, nums):
          nums.sort()
          result = []
          for i in range(len(nums)-2):
             if i> 0 and nums[i] == nums[i-1]:
                continue
             l = i+1
             r = len(nums)-1
             while(l<r):
                sum = nums[i] + nums[l] + nums[r]
                if sum<0:
                   l+=1
                elif sum >0:
                   r-=1
                else:
                   result.append([nums[i],nums[l],nums[r]])
                   while l<len(nums)-1 and nums[l] == nums[l + 1] : l += 1
                   while r>0 and nums[r] == nums[r - 1]: r -= 1
                   l+=1
                   r-=1
          return result
    ob1 = Solution()
    print(ob1.threeSum([-1,0,1,2,-1,-4]))

    输入项

    [-1,0,1,2,-1,-4]

    输出结果

    [[-1,-1,2],[-1,0,1]]