博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode - 中等 - 三数之和 - ab剪枝
阅读量:4297 次
发布时间:2019-05-27

本文共 2785 字,大约阅读时间需要 9 分钟。

题干

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]

看到题目,首先想到 ab 剪枝,于是作答如下:

class Solution:    def threeSum(self, nums: List[int]) -> List[List[int]]:        nums.sort()        res = []        dictDeleteRepeat = {
} lastNum = None for i in range(len(nums)-2): if lastNum!=nums[i]: # 剪枝 leftValue = 0-nums[i] lastNumInner = None if leftValue<=nums[-1]+nums[-2] and leftValue>=nums[i + 1]+nums[i + 2]: for j in range(i+1,len(nums)-1): if lastNumInner!=nums[j]: # 再剪 leftValueInner = leftValue-nums[j] if leftValueInner<=nums[-1] and leftValueInner>=nums[j + 1]: if leftValueInner in nums[j+1:]: tempList = [nums[i],nums[j],leftValueInner] listStr = ''.join([str(item) for item in tempList]) if listStr not in dictDeleteRepeat: res.append(tempList) dictDeleteRepeat[listStr] = True lastNumInner = nums[j] lastNum = nums[i] return res

无奈超时,后加以思索,优化第三数是否存在于数组之中的查询,遂AC。优化后如下:

class Solution:    def threeSum(self, nums: List[int]) -> List[List[int]]:        nums.sort()        res = []        dictDeleteRepeat = {
} dictNums = {
} for item in nums: dictNums[item] = True lastNum = None for i in range(len(nums)-2): if lastNum!=nums[i]: # 剪枝 leftValue = 0-nums[i] lastNumInner = None if leftValue<=nums[-1]+nums[-2] and leftValue>=nums[i + 1]+nums[i + 2]: for j in range(i+1,len(nums)-1): if lastNumInner!=nums[j]: # 再剪 leftValueInner = leftValue-nums[j] if leftValueInner<=nums[-1] and leftValueInner>=nums[j + 1]: if leftValueInner in dictNums: tempList = [nums[i],nums[j],leftValueInner] listStr = ''.join([str(item) for item in tempList]) if listStr not in dictDeleteRepeat: res.append(tempList) dictDeleteRepeat[listStr] = True lastNumInner = nums[j] lastNum = nums[i] return res

转载地址:http://vqbws.baihongyu.com/

你可能感兴趣的文章
机器学习科学计算库使用
查看>>
tensorflow-01-构建网络模型
查看>>
目标分割网络-segnet
查看>>
目标分割-U-net
查看>>
Invalid DISPLAY variable
查看>>
vscode读取相对路径的问题处理
查看>>
将AnacondaShell添加到鼠标右键
查看>>
C/C++中的报错踩坑
查看>>
VS中链接库以及动态库文件配置的问题
查看>>
c++多线程编程:C2672
查看>>
VS提示LNK1181,无法打开XXX.lib
查看>>
c/c++错误:LNK2019
查看>>
tensorflow1.13 + gpu + C++环境编译配置
查看>>
C++ 错误:C2664:无法将参数 2 从“char [256]”转换为“LPWSTR”
查看>>
Tensorrt部署时,显示算例不匹配报错的解决方法
查看>>
关于C++中vector和deque的使用效率测试记录
查看>>
C++:tensorrt-C++实现,加载enigen错误
查看>>
OpenCV C++:imshow显示不成功,灰色窗口
查看>>
C++: C2572默认参数重定义
查看>>
C++: MSC3721错误
查看>>