采用排序加双指针
三数之和,给定一个包含n个整数的数组nums,判断nums中存在三个元素,abc ,之和为0,
答案中不可以包含重复的三元祖
nums=[-1,0,1,2,-1,4]
[[-1,-1,2],[-1,0,1]]

class ThirdSum:
def qiuHe(self, nums):
nums.sort()
print(nums)
list1 = []

    for i in range(len(nums)):
        if nums[0] > 0:
            return list1
        if i > 0 and nums[i] == nums[i - 1]:
            continue  # 如果两个相同的话,直接跳过,去重
        # 控制左右两个指针
        left = i + 1
        right = len(nums) - 1
        while left < right:
            list2 = []  # 把三个数 的值存入到列表里
            sum = nums[i] + nums[left] + nums[right]
            if sum > 0:
                right -= 1
            elif sum < 0:
                left += 1
            elif sum == 0:  # 如果三者之和为0
                list2.append(nums[i])
                list2.append(nums[left])
                list2.append(nums[right])
                list1.append(list2)
                # 去重
                # while right>left and nums[right]==nums[right-1]:right-=1
                # while right > left and nums[left] == nums[left + 1]: left+=1
                right -= 1
                # left +=1

    return list1
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐