@@ -44,7 +44,7 @@ D = [ 0, 2]
44
44
45
45
1 . 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
46
46
2 . 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
47
- 3 . 定义int变量count,用来统计a +b+c+d = 0 出现的次数。
47
+ 3 . 定义int变量count,用来统计 a +b+c+d = 0 出现的次数。
48
48
4 . 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
49
49
5 . 最后返回统计值 count 就可以了
50
50
@@ -139,7 +139,7 @@ class Solution(object):
139
139
return count
140
140
141
141
142
- ```
142
+ ```
143
143
144
144
Go:
145
145
``` go
@@ -229,28 +229,24 @@ class Solution {
229
229
Swift:
230
230
``` swift
231
231
func fourSumCount (_ nums1 : [Int ], _ nums2 : [Int ], _ nums3 : [Int ], _ nums4 : [Int ]) -> Int {
232
- // key:a+b的数值,value:a+b数值出现的次数
233
- var map = [Int : Int ]()
234
- // 遍历nums1和nums2数组,统计两个数组元素之和,和出现的次数,放到map中
235
- for i in 0 ..< nums1.count {
236
- for j in 0 ..< nums2.count {
237
- let sum1 = nums1[i] + nums2[j]
238
- map[sum1] = (map[sum1] ?? 0 ) + 1
232
+ // ab和: ab和出现次数
233
+ var countDic = [Int : Int ]()
234
+ for a in nums1 {
235
+ for b in nums2 {
236
+ let key = a + b
237
+ countDic[key] = countDic[key, default : 0 ] + 1
239
238
}
240
239
}
241
- // 统计a+b+c+d = 0 出现的次数
242
- var res = 0
243
- // 在遍历大num3和num4数组,找到如果 0-(c+d) 在map中出现过的话,就把map中key对应的value也就是出现次数统计出来。
244
- for i in 0 ..< nums3.count {
245
- for j in 0 ..< nums4.count {
246
- let sum2 = nums3[i] + nums4[j]
247
- let other = 0 - sum2
248
- if map.keys .contains (other) {
249
- res += map[other]!
250
- }
240
+
241
+ // 通过-(c + d)作为key,去累加ab和出现的次数
242
+ var result = 0
243
+ for c in nums3 {
244
+ for d in nums4 {
245
+ let key = - (c + d)
246
+ result += countDic[key, default : 0 ]
251
247
}
252
248
}
253
- return res
249
+ return result
254
250
}
255
251
```
256
252
0 commit comments