三数之和 go实现

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

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

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

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]
func threeSum(nums []int) [][]int {
    sort.Ints(nums)
    l := len(nums)
    var result [][]int
    for i := 0; i < l - 1 && nums[i] <= 0; i++ {
        if i > 0 && nums[i] == nums[i - 1] {
	continue
        }
        j := i + 1
        k := l - 1
        target := 0 - nums[i]
        for ; j < k; {
	sum := nums[j] + nums[k]
	if sum == target {
	    result = append(result, []int{nums[i], nums[j], nums[k]})
	    j++
	    for j < k && nums[j-1] == nums[j] {
	        j++
	    }
	    k--
	    for j < k && nums[k+1] == nums[k] {
	        k--
	    }
	} else if sum > target {
	    k--
	    for j < k && nums[k+1] == nums[k] {
	        k--
	    }
	} else {
	    j++
	    for j < k && nums[j-1] == nums[j] {
	        j++
	    }
	}
        }
    }
    return result
}

猜你喜欢

转载自blog.csdn.net/s15738841819/article/details/84584732