zoukankan      html  css  js  c++  java
  • 算法:三个数之和

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

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

    例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
    
    满足要求的三元组集合为:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]
    一开始看到这个题目,我并没有想太多,没有考虑复杂度神马的,就直接写了
    class Solution(object):
        def threeSum(self,nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
            res = []
            nums.sort()
            N = len(nums)
            for i in range(0,N-3):
                for j in range(i+1,N-2):
                    for k in range(j+1,N-1):
                        if  nums[i]+nums[j]+nums[k] == 0:
                                res.append([nums[i],nums[j],nums[k]])
            return res
    

     写完了,一运行发现了,有一种重复的情况根本就去除不了,

      算了,加一个筛选吧

    res = []
            # nums.sort()
            N = len(nums)
            for i in range(0,N-3):
                for j in range(i+1,N-2):
                    for k in range(j+1,N-1):
                        if  nums[i]+nums[j]+nums[k] == 0:
                            res.append([nums[i],nums[j],nums[k]])
            for x in range(0,len(res)-1):
                for y in range(0,len(res)-1):
                    if res[x][1]==res[y][0] and res[x][2] == res[y][1]:
                        del res[y]
    
            return res
    

      好丑啊,还是想一想算了好好写吧

    nums.sort()
        res =[]
        i = 0
        for i in range(len(nums)):
            if i == 0 or nums[i]>nums[i-1]:
                l = i+1
                r = len(nums)-1
                while l < r:
                    s = nums[i] + nums[l] +nums[r]
                    if s ==0:
                        res.append([nums[i],nums[l],nums[r]])
                        l +=1
                        r -=1
                        while l < r and nums[l] == nums[l-1]:
                            l += 1
                        while r > l and nums[r] == nums[r+1]:
                            r -= 1
                    elif s>0:
                        r -=1
                    else :
                        l +=1
        return res
    

      

  • 相关阅读:
    shell数组
    Apache HTTP Server 与 Tomcat 的三种连接方式介绍
    实现Java动态类载入机制
    Tomcat 阀
    MYSQL 常用命令
    MYSQL字符数字转换
    主题:MySQL数据库操作实战
    日本手机三大代理商的UA
    Java解析XML文档——dom解析xml (转载)
    MS sql server和mysql中update多条数据的例子
  • 原文地址:https://www.cnblogs.com/xinin0909/p/10464611.html
Copyright © 2011-2022 走看看