zoukankan      html  css  js  c++  java
  • LeetCode 15. 三数之和

    15. 三数之和

    Difficulty: 中等

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 _a,b,c ,_使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

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

    示例 1:

    输入:nums = [-1,0,1,2,-1,-4]
    输出:[[-1,-1,2],[-1,0,1]]
    

    示例 2:

    输入:nums = []
    输出:[]
    

    示例 3:

    输入:nums = [0]
    输出:[]
    

    提示:

    • 0 <= nums.length <= 3000
    • -10<sup>5</sup> <= nums[i] <= 10<sup>5</sup>

    Solution

    解法一:暴力解法,时间复杂度为O(N^3),嵌套了三层循环

    class Solution:
        def threeSum(self, nums: List[int]) -> List[List[int]]:
            nums.sort()
            res = []
            for i in range(len(nums)):
                tmp = self.twoSumHelper(nums[i+1:], 0-nums[i])
                for item in tmp:
                    item.append(nums[i])
                    res.append(item)
            return [list(t) for t in set(tuple(_) for _ in res)]
        
        def twoSumHelper(self, nums, target):
            d, ans = {}, []
            for i in range(len(nums)):
                if target - nums[i] in d:
                    ans.append([nums[i], target - nums[i]])
                d[nums[i]] = i
            return ans
    

    解法二:时间复杂度为O(N^2),思路是求a+b+c=0,等价于a=-(b+c),即在nums[i+1:]列表中寻找满足-(b+c)的数字。

    class Solution:
        def threeSum(self, nums: List[int]) -> List[List[int]]:
            if len(nums) < 3: 
                return []
            nums.sort()
            res = set()
            
            for i, v in enumerate(nums[:-2]):
                if i >= 1 and v == nums[i-1]:
                    continue
                d = {}
                for x in nums[i+1:]:
                    if x not in d:
                        d[-v-x] = 1
                    else:
                        res.add((v, -v-x, x))
            return list(res)
    
  • 相关阅读:
    公布一些常用的WebServices
    ARM的嵌入式Linux应用程序开发研究
    c++读写剪贴板代码
    如何破解路由器密码(CISCO)!
    用Shell扩展实现源代码统计程序(转)
    图文例解C++类的多重继承与虚拟继承
    MSDN上关于ADO示例代码
    不错的句子
    codeforces #271(div2) F. Ant colony
    [Z]CUDA中Bank conflict冲突
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14348879.html
Copyright © 2011-2022 走看看