题解
func fourSumCount(nums1 []int, nums2 []int, nums3 []int, nums4 []int) int {
var record = make(map[int]int, len(nums1)*len(nums1))
for _, n1 := range nums1 {
for _, n2 := range nums2 {
record[n1+n2]++
}
}
var result int
for _, n3 := range nums3 {
for _, n4 := range nums4 {
result += record[-n3-n4]
}
}
return result
}
要点
-
先考虑暴力解法:四层 for 循环计算每一组结果并且判断和是否为 0。这样的时间复杂度是 O(n^4)。
-
所以可以分为两组分别计算,然后判断两组的和是否为 0。这样就可以把时间复杂度降为 O(n^2)。
-
🌝 发现个有意思的事情,代码第 3 行:初始化保存临时结果的 map 时,如果手动指定 map 的容量或者不指定容量时,ac 后的耗时是 100+ms;但是如果使用
len(nums1)*len(nums1)初始化时,耗时就会降为 50+ms。