力扣:四数相加2
思路:
建立一个map类型;
利用map存入num1和num2遍历相加的的值为key,出现次数存为value;
在与num3和num4遍历的和求(0-(num3+num4))是否存在于map中,存在则将结果result加上该map里(0-(num3+num4))的key的value值。
疑难问题:
1.为什么不用4层for循环?
4层for循环的时间复杂度为O(n4),而两个2层for循环的时间复杂度为O(n2)。
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer,Integer> map1 = new HashMap<>();//定义一个map类型
int temp;//定义一个temp来存储遍历的两个num的和
for(int i:nums1){
for(int j:nums2){//遍历num1和num2
temp = i+j;//存num1和num2的和
if(map1.containsKey(temp)){//判断map1里是否存在该和temp
map1.put(temp,map1.get(temp)+1);//存在则对该map里key为temp的value加1
}else{
map1.put(temp,1);//不存在则map里加入一个key为temp,value为1
}
}
}
int result = 0;//定义结果
for(int i:nums3){
for(int j:nums4){//遍历num3,4
temp = i+j;//存储3,4的和
if(map1.containsKey(0-temp)){//判断0-temp是否存在于map中
result += map1.get(0-temp);//存在则结果加该0-temp的map的value值
}
}
}
return result;
}
}