原题链接
看到这类问题已经放弃挣扎了,,
- 排序
- 固定一个,找另外3个 --》转化为 3sum, 再固定一个,找另外两个,,then, binary search
需要注意的就是去重
时间复杂度 O(N^3)
空间复杂度 O(1)
func fourSum(nums []int, target int) [][]int {
var result [][]int
if nums == nil || len(nums) <= 3 {
return result
}
sort.Ints(nums)
for i := 0; i <= len(nums) - 4; i++ {
if i > 0 && nums[i] == nums[i-1] {
continue
}
for j := i + 1; j <= len(nums) - 3; j++ {
if j > i + 1 && nums[j] == nums[j-1] {
continue
}
left, right := j + 1, len(nums) - 1
for ; left < right; {
if (nums[i] + nums[j] + nums[left] + nums[right]) == target {
item := []int {nums[i], nums[j], nums[left], nums[right]}
result = append(result, item)
left++
for ; left < right && nums[left] == nums[left-1]; {
left++
}
}else if (nums[i] + nums[j] + nums[left] + nums[right]) < target {
left++
}else {
right--
}
}
}
}
return result
}