LeetCode 15. 三数之和

发布时间 2023-05-07 20:58:08作者: 小星code

题目链接:LeetCode 15. 三数之和

题意:

在给定的数组中,找出三个数(三个数不重复)使得他们相加的和为 0 ,同时答案中不能有重复的答案

解题思路:

完整代码如下:


//双指针做法首先要有序

// 解法一 最优解,双指针 + 排序
func threeSum(nums []int) [][]int {
    var res [][]int
    sort.Ints(nums) //对nums数组进行排序
    //认为 i < j < k
for i:=0;i<len(nums);i++{   //遍历 i
    if i>0 && nums[i] == nums[i-1]{ //去重
        continue
    }
    for j,k:=i+1,len(nums)-1 ;j < k ; j++{   //同时遍历 j 和 k  结束条件 j,k 相遇
        if j > i+1 && nums[j] == nums[j-1]{ //同样 去重
        continue
        }
        for j < k-1 && nums[i] + nums[j] +nums[k-1] >=0 {  
            //目的是为了找到nums[i] + nums[j] +nums[k] > 0 的最小值
            k--
        }
        if nums[i] + nums[j] +nums[k]== 0 {
                res = append(res, []int{nums[i], nums[j], nums[k]})
        }
    }
}
    return res
}