美文网首页
三数之和

三数之和

作者: 绘梨衣_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指针左移,去除相同数则通过判断指针与上一个数是否相同来判断。

相关文章

  • algrithrom

    求和问题,双指针解决 done 两数之和 三数之和 最接近三数之和 四数之和 链表反转问题 done 链表反转 链...

  • LeetCode 第18题:四数之和

    1、前言 2、思路 采用三数之和的思路,原本三数之和可以分解为:数组中的一个数 + 此数右边的数求两数之和,那么四...

  • 两数之和&三数之和&四数之和&K数之和

    今天看了一道谷歌K数之和的算法题,忽然想起来之前在力扣上做过2、3、4数之和的题,觉得很有必要来整理一下。其实2、...

  • 两数之和,三数之和

    转载:https://www.cnblogs.com/DarrenChan/p/8871495.html 1. 两...

  • 双指针总结

    左右指针 主要解决数组中的问题:如二分查找 盛最多水的容器 三数之和 四数之和 最接近三数之和 快慢指针 主要解决...

  • 【LeetCode通关全记录】15. 三数之和

    【LeetCode通关全记录】15. 三数之和 题目地址:15. 三数之和[https://leetcode-cn...

  • leetcode top100

    1.求两数之和(数组无序) 2.求电话号码的字母组合 3.三数之和 4.两数之和(链表)

  • 纯C手撕leetcode-基本数据结构-hash table

    Hash table纯C实现两数之和和Hashtable 三数之和https://leetcode-cn.com/...

  • 三数之和

    三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a +...

  • 三数之和

    三数之和这里我是将用最暴力的三重循环来检验x + y = -z,然后排序过后输出,但是这样时间复杂度为O(n^3)...

网友评论

      本文标题:三数之和

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