美文网首页
求三个数和为0

求三个数和为0

作者: Go语言由浅入深 | 来源:发表于2022-01-29 16:31 被阅读0次

题目描述:

给定一个数组,要求在这个数组中找出 3 个数之和为 0 的所有组合。

Example:

Given array nums = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

算法思路

使用双指针法:先对数组排序,然后用两个索引变量指向数组的首尾,遍历索引变量中间的元素与两个索引指向的元素和:

  • 如果和大于0,尾部的索引向前移动一位,如果前面的一位和当前值相等直接跳过
  • 如果和小于0,首部的索引向后移动一位,同样如果后面的一位和当前值相等直接跳过
  • 如果等于0,将当前变量和收尾变量添加到结果中,首部索引向后移动一位,尾部索引向前移动一位。

代码:

func threeSum(num []int) [][]int {
    sort.Ints(num)
    start, end, index, length := 0, 0, 0, len(num)
    var (
        result = make([][]int, 0)
    )
    for index = 1; index < length-1; index++ {
        start, end = 0, length-1
        for start < index && index < end { //注意避免重复
            //重复的值跳过
            if start > 0 && (num[start] == num[start-1]) {
                start++
                continue
            }
            //重复的值跳过
            if end < length-1 && (num[end+1] == num[end]) {
                end--
                continue
            }
            sum := num[start] + num[end] + num[index]
            if sum == 0 {
                result = append(result, []int{num[start], num[index], num[end]})
                start++
                end--
            } else if sum > 0 {
                end--
            } else {
                start++
            }
        }
    }
    return result
}

相关文章

  • 求三个数和为0

    题目描述: 给定一个数组,要求在这个数组中找出 3 个数之和为 0 的所有组合。 Example: 算法思路 使用...

  • 求集合的所有子集

    求集合的所有子集 对于任意集合A,元素个数为n(空集n=0),其所有子集的个数为2^n个 如集合A={a,b,c}...

  • day7homework

    1.已知一个数字列表,求列表中心元素。元素个数为单数 元素个数为偶数 2.已知一个数字列表,求所有元素和。 3.已...

  • 《恋上数据结构与算法一》笔记(6.2)二叉树面试题

    目录 一 如果一棵完全二叉树有768个节点,求叶子节点的个数 假设叶子节点个数为 n0,度为1的节点个数为 n1,...

  • FCTRL - Factorial

    题目大意:求N!尾部有几个0。思路:dp,很容易想到0的个数跟2和5有关,但2的个数多,因此由5决定。设dp(n)...

  • 【数组】--零子数组、最大连续子数组、数字连续子数组

    零子数组:对于长度为N的数组,求连续子数组和和最接近0的值和子数组最大连续子数组:给定一个数组A,求A的连续子数组...

  • 小问题:求随机给定100个数中相加和为0的3个数

    女票去面试,遇到个面试官提了个算法题,问题大概是“求随机给定100个数中相加和为0的3个数”,其实算法题在面试的过...

  • Python函数简单Demo案例

    目录 一、写一个函数求三个数的和,并返回结果 二、写一个函数求三个数的平均值,并返回结果 三、再写一个函数求每个数...

  • 728. Self Dividing Numbers

    728. Self Dividing Numbers【思路】:一个数字能够被组成的数自我求余为0;如128 % 1...

  • 【习题43】

    【程序43】题目:求0—7所能组成的奇数个数。

网友评论

      本文标题:求三个数和为0

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