鱼C论坛

 找回密码
 立即注册
查看: 670|回复: 3

题的问题

[复制链接]
发表于 2020-5-9 11:23:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
例子:给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums = sorted(nums)
        if len(nums) < 3 or nums[0] > 0 or nums[-1] < 0:
            return []
        
        result = []
        i = 0

        while nums[i] <= 0 and i < len(nums)-1:
            if i > 0 and nums[i] == nums[i-1]:
                i += 1
                continue
            j = i+1
            k = len(nums)-1
            while j<k:    
                if nums[j]+nums[i]+nums[k] > 0:
                    k -= 1
                    # while k > j and nums[k] == nums[k+1]:
                    #     k -= 1
                elif nums[j]+nums[i]+nums[k] < 0:
                    j += 1
                    # while j < k and nums[j]==nums[j-1]:
                    #     j += 1
                else:
                    result.extend([[nums[i],nums[j],nums[k]]])
                    j += 1
                    k -= 1
                    while j<k and nums[k] == nums[k+1]: k-=1
                    while j<k and nums[j] == nums[j-1]: j+=1
            i += 1
        return result
为什么注释的几行去掉后 效率提高了很多呢?
思路是固定最左边 然后右边双指针寻找 跳过重复项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-9 14:04:06 | 显示全部楼层
你注释的部分就是跳过重复项的操作呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-9 14:09:15 | 显示全部楼层
combinations函数便方便些
nums = [-1, 0, 1, 2, -1, -4]
from itertools import combinations as cb
def threeSum(nums):
    result=[]
    for i in cb(nums,3):
        j=sorted(list(i))
        if sum(j)==0 and j not in result:
            result.append(j)
    return result
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-9 14:55:20 | 显示全部楼层
不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 05:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表