题目
1 | 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 |
示例:
1 | 示例 1: |
暴力解法
最简单的往往都是暴力解法,三个数 就三重循环, 比较简单,直接上代码
三重循环时间复杂度是 O(N3)
1 | // ThreeNumsBaoli 暴力之美 |
双指针法
这里既然三个数之和为0, 要么三个数都是0, 必须有一个负数,这里是不是可以考虑先将数组排序,固定一个数, 该数后面使用,头尾双指针,将三个指针位置的数相加,如果小于0, 那将左边的指针右移,这里为啥? 直接就右移,因为数组有序,右边指针已经是最大的数了,只能增加最小的数,才可能等于0。应该很好理解。
1 | func ThreeNumRep(nums []int) [][]int { |
代码实现的是思路,思路有了代码实现 还搞半天,这是编码能力的问题吗? 写过之后 再来看这个思路有,代码又要搞半天,我理解应该是见的少了。