51-数组-三数之和-LeetCode15(python)

  • 题目描述

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

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

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

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]
  • 解决思路

(1)最开始我的解决思路是使用暴力,从头开始遍历所有的元素,寻找满足条件的三元组并输出,编码之后发现输出的结果有问题,主要体现在元素没有排序,而且还会有重复的三元组出现。想到的解决方案是把数组变为set,然后再排序,之后再进行暴力的遍历,但是结果仍然不能通过,讨论区有很多回答说的是超时问题,我的答案却是索引的问题,这么看来按暴力解法的话,我的思路其实也不是那么完全正确,使用python,网友的解决方案如下:

(2)仍旧是先进行排序,排序之后进行遍历,在遍历的过程中,分别考虑三元组的三个元素,这三个元素都有可能遇到重复的数值,我们通过比较i,j,k分别对应的元素与相邻元素的值是否相同,控制i,j,k是否需要向后(i,j)或向前(k)移动。除此之外,通过判断当前三数之和与0的关系,可以决定j,k哪一个需要向前或向后移动。

(3)要特别注意对i的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值