前置条件
给定四个长度相等的数组,求有多少种情况四数相加为0
- 哈希表
这一题为上一题两数之后的升级版
可以根据分治法的思想
四数之和等于两个两数之和
也就是哈希表中存放的是两数之后
从左至右遍历判断零减两数之和是否在哈希表里
def fourSumCount(nums1,nums2,nums3,nums4):
hashmap = {}
for i in nums1:
for j in nums2:
if i + j in hashmap:
hashmap[i + j] += 1
else:
hashmap[i + j] = 1
count = 0
for k in nums3:
for l in nums4:
if -k-l in hashmap:
count += hashmap[-k-l]
return count
- 代码优化:用默认字典做哈希表
from collections import defaultdict
def fourSumCount(nums1,nums2,nums3,nums4):
hashmap,count = defaultdict(int),0
for i in nums1:
for j in nums2:
hashmap[i+j]+=1
for k in nums3:
for l in nums4:
count += hashmap.get((-k-l),0)
return count