美文网首页
三数之和

三数之和

作者: 绘梨衣_34f3 | 来源:发表于2018-11-21 17:05 被阅读0次

    三数之和这里我是将用最暴力的三重循环来检验x + y = -z,然后排序过后输出,但是这样时间复杂度为O(n^3) ,LeetCode检验超时。。。,所以参考了一下大佬的算法,这样时间复杂度就变成了O(n^2),但是有时提交还是超时,这对时间复杂度要求也太高了吧。。。

    • 我的垃圾算法
            result = []
            for i in range(len(nums)):
                x = nums[i]
                for j in range((i + 1),len(nums)):
                    y = nums[j]
                    for k in range((j + 1),len(nums)):
                        z = nums[k]
                        if x + y == -z:
                            temp = [x,y,z]
                            temp.sort()
                            if temp not in result:
                                result.append(temp)
            result.sort()
            return result
    
    • 大佬的算法
    nums.sort()
            result = []
            i = 0
            for i in range(len(nums)):
                if i == 0 or nums[i] > nums[i - 1]:
                    left = i + 1
                    right = len(nums) - 1
                    
                    while left < right:
                        res = nums[i] + nums[left] + nums[right]
                        if res == 0:
                            result.append([nums[i], nums[left], nums[right]])
                            left += 1
                            right -= 1
                            #防止相同数
                            while left < right and nums[left] == nums[left - 1]:
                                left += 1
                            while left < right and nums[right] == nums[right + 1]:
                                right -= 1
                            
                        elif res > 0:
                            right -= 1
                        elif res < 0:
                            left += 1
            return result
    
    

    这个算法的思想是先将数据进行排序,确定一个数x,然后用指针left指向小数,指针right指向大数,若x + nums[left] + nums[right]大于0,则right指针右移,小于0则left指针左移,去除相同数则通过判断指针与上一个数是否相同来判断。

    相关文章

      网友评论

          本文标题:三数之和

          本文链接:https://www.haomeiwen.com/subject/pricqqtx.html