视频讲解:梦破碎的地方!| LeetCode:15.三数之和_哔哩哔哩_bilibili
文字讲解:代码随想录
力扣地址:. - 力扣(LeetCode)
记录:看起来比较复杂 其实看看视频很容易理解并写出正确代码
1 使用三个指针 头 头+1 (left) 尾指针(right) 有点滑动窗口的意思
2 对元素相同的进行去重
头:nums[i] == nums[i-1] left:nums[left] == nums[left+1] right: nums[right] == nums[right-1]
func threeSum(nums []int) [][]int {
sort.Ints(nums)
res := [][]int{}
for i:= 0; i< len(nums)-2;i++ {
if nums[i] > 0 {
return nil
}
if i > 0 && nums[i] == nums[i-1] {
continue
}
left := i + 1
right := len(nums)-1
for left < right {
if nums[i] + nums[left] + nums[right] > 0 {
right--
}else if nums[i] + nums[left] + nums[right] < 0 {
left++
}else{
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--
}
}
return res
}