3Sum

来源:互联网 发布:ubuntu终端命令大全 编辑:程序博客网 时间:2024/06/07 18:19

输入一个列表,输出列表中任意三个数相加为零的集合

    res = []    nums = sorted(nums)    for i in range(0, len(nums) - 1):        if i > 0 and nums[i] == nums[i - 1]:            continue        j = i + 1        k = len(nums) - 1        target = -nums[i]        while j < k:            if nums[j] + nums[k] > target:                k -= 1            elif nums[j] + nums[k] < target:                j += 1            else:                res.append([nums[i], nums[j], nums[k]])                # 把判断加到添加列表后,如果下一个值与上一个值相同,那么直接跳过,就减少了好多if判断                while j < k - 1 and nums[j] == nums[j + 1]:                    j += 1                while k > j + 1 and nums[k] == nums[k - 1]:                    k -= 1                j += 1                k -= 1    return res

==菜鸡新手,改了两个小时,重点在加注释的地方,还有使用while,解决了列表排序后的2,2,2,2,2连续值相等的问题。据说这个是最简单的,时间复杂度O(nlgn)