微信h5免费制作网站子域名大全查询
力扣题目链接
给你四个整数数组 nums1
、nums2
、nums3
和 nums4
,数组长度都是 n
,请你计算有多少个元组 (i, j, k, l)
能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
分析:
当需要判断一个元素是否在集合中时,就使用哈希法
set map multiset multimap 底层为红黑树,unordered_set unordered_map底层是哈希
unordered_set会去重,故使用unordered_map。
如果首先遍历一个数组,然后遍历三个数组来进行判断,时间复杂度n*n^3;
如果遍历两个数组,然后遍历两个数组进行判断,时间复杂度n^2*n^2,为最优解。
map中的key对应a+b数组的和,value对应和出现的次数。
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {unordered_map<int, int> umap; //key:a+b的数值,value:a+b数值出现的次数for (int a:A) {for (int b:B) {umap[a+b]++;}}int count = 0;//统计总次数 a+b+c+d=0 c+d=0-(a+b)for (int c:C) {for (int d:D) {if (umap.find(0-(c+d))!=umap.end()) {count += umap[0 - (c + d)];//每出现一次 就和a+b数组中出现的次数相加}}}return count;
}