- 题目描述
给定一个包含 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的