2026-06-270

三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

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

解题思路

  • 先排序
  • 双层循环
    • 外层遍历作为第一个数的选择
    • 内层通过左右指针往内靠,找到另外两个数
  • 不管是内外层,重复的出现的数都跳过不计算

代码实现

golang
func threeSum(nums []int) [][]int { sort.Ints(nums) res := [][]int{} for i := 0; i < len(nums); i++ { if i > 0 && nums[i] == nums[i-1] { continue } left, right := i+1, len(nums)-1 for left < right { sum := nums[i] + nums[left] + nums[right] if sum == 0 { res = append(res, []int{nums[i], nums[left], nums[right]}) for left < right && nums[left] == nums[left+1] { left++ } for left < right && nums[right] == nums[right-1] { right-- } left++ right-- } else if sum < 0 { left++ } else { right-- } } } return res }

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!