美文网首页
三数之和

三数之和

作者: Houtasu | 来源:发表于2018-07-26 23:13 被阅读0次

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

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

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

解题思路
最简单的思路:直接三个循环嵌套,后两个循环从上一个索引开始到数组结尾遍历,然后求和看等不等于0。但这样耗时较多,虽然能达到题目的要求,但也要排到很后面了。
然后是下面这种,排在最前面的大佬的思路。
先用字典统计出现的数字及他们的个数
比如上面的例子就变成了
{-1:2, 0:1, 1:1 ...}这种了
然后再把字典的键分为正数和负数两个列表
分别在两个列表中取数,用0减去这两个数,获得第三个数
再到字典的键中查找有没有这个数
有这个数的话,还要考虑两种情况
第三个数是否和前两个数相同,如例子中的两个-1
如果相同的话,那原数组中就必须有两个才行
比如例子中有 -4和2,那么0-(-4)-2=2
但原数组中只有一个2,所以[-4,2,2]是不能作为结果的
还有一种是三个数都不相同,那么自然就是结果之一了
因为前面已经用字典把重复的数字合并了,所以结果中也不会出现重复的情况。

class Solution:
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        return_list = []
        a = {}
        for i in nums:
            a[i] = a.get(i, 0) + 1
        if 0 in a and a[0] >= 3:
            return_list.append([0, 0, 0])
            
        neg = [i for i in a if i < 0]
        pos = [i for i in a if i >= 0]
        
        for i in neg:
            for j in pos:
                dif = 0 - i - j
                if dif in a:
                    if dif in [i, j] and a[dif] >= 2:
                        return_list.append([i, j, dif])
                    if i < dif < j:
                        return_list.append([i, j, dif])
        
        return return_list

相关文章

  • 三数之和

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

  • 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 +...

网友评论

      本文标题:三数之和

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