做热血钓鱼网站,广州中小学安全教育平台,创意家装设计公司,齐全的赣州网站建设原题链接#xff1a;
力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台 题面#xff1a; 给你四个整数数组 nums1、nums2、nums3 和 nums4 #xff0c;数组长度都是 n #xff0c;请你计算有多少个元组 (i, j, k, l) 能满足#xff1a; 0 i,…原题链接
力扣LeetCode官网 - 全球极客挚爱的技术成长平台 题面 给你四个整数数组 nums1、nums2、nums3 和 nums4 数组长度都是 n 请你计算有多少个元组 (i, j, k, l) 能满足 0 i, j, k, l nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1 输入nums1 [1,2], nums2 [-2,-1], nums3 [-1,2], nums4 [0,2]
输出2
解释
两个元组如下
1. (0, 0, 0, 1) - nums1[0] nums2[0] nums3[0] nums4[1] 1 (-2) (-1) 2 0
2. (1, 1, 0, 0) - nums1[1] nums2[1] nums3[0] nums4[0] 2 (-1) (-1) 0 0示例 2 输入nums1 [0], nums2 [0], nums3 [0], nums4 [0]
输出1提示 n nums1.lengthn nums2.lengthn nums3.lengthn nums4.length1 n 200-2^28 nums1[i], nums2[i], nums3[i], nums4[i] 2^28 解题思路
直接四重循环会超时我们可以考虑将四个数组分成两组nums1和nums2一组nums3和nums4一组先用两重循环将nums1和nums2所有相加和枚举出来并计数用unordered_map计数不需要用map因为不需要有序用map会浪费性能然后再用两重循环枚举num3和num4的所有相加和统计相反数的数量即可。 代码CPP
class Solution {
public:int fourSumCount(vectorint nums1, vectorint nums2, vectorint nums3, vectorint nums4) {int n nums1.size();unordered_mapint, int mp;for (int i 0; i n; i) {for (int j 0; j n; j) {mp[nums3[i] nums4[j]];}}int ans 0;for (int i 0; i n; i) {for (int j 0; j n; j) {ans mp[-(nums1[i] nums2[j])];}}return ans;}
};