Leetcode15 3Sum(C++)

Leetcode15 3Sum(C++)

题目论述

  • 链接:

    Leetcode15 3Sum

  • 概述:

    Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

    Note:

    The solution set must not contain duplicate triplets.

    Example:

    Given array nums = [-1, 0, 1, 2, -1, -4],
    
    A solution set is:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]
    

思考分析

分析一:

​ 三层循环暴力求解。

​ 复杂度O(n^3)

分析二(Solution1):

​ 我们根据之前做的Leetcode16: 3 Sum Closest的思路,将这道三数和问题转化为二数和问题。

  • 第一步,因为所求与原始数组下标无关,故放心大胆地先将数组排序。
  • 第二步,用一个for循环选出三数中最小的一个数num[target]
  • 第三步,用一个while循环从num[target]后面的数中,以从两头向中间逼近的方法确定剩下的两个数num[head], num[tail],如果num[head] + num[tail] = -num[target],那么,(num[target], num[head], num[tail])就是满足条件的三元组。
  • 第四步,按照上述步骤得到的三元组是有重复的,那么我们要优化一下,避免向答案数组中加入重复项。
    • 在for循环中,如果num[target]与之前的一样的话,那么target++,跳过。
    • 在while循环中,我们规定如果找到一个满足条件的(head, tail),head++继续寻找不同的(head, tail)。那么需要判断head++后,当下的num[head]与之前的是否相同,相同的话,那么head++,跳过。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值