算法笔记|Day6哈希表基础II
☆☆☆☆☆leetcode 454.四数相加II
题目链接:leetcode 454.四数相加II
题目分析
1.采用哈希map,遍历前两个数组的每个元素并求和存到map中,key来存元素的和sum,value来存出现次数,考虑后两个数组中每个元素的和的相反数是否在map出现过及出现次数;
2.时间复杂度为O(n2),空间复杂度为O(n2)。
代码
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
int res=0;
Map<Integer,Integer>map=new HashMap<>();
for(int i:nums1){
for(int j:nums2){
int sum=i+j;
map.put(sum,map.getOrDefault(sum,0)+1);
}
}
for(int i:nums3){
for(int j:nums4){
res+=map.getOrDefault(-i-j,0);
}
}
return res;
}
}
提示:map.getOrDefault(key, defaultValue) 用于从Map中获取与给定键(key)相关联的值(value),如果Map中包含给定的键,则返回该键对应的值;如果Map中不包含该键,则返回提供的默认值defaultValue。
☆☆☆☆☆leetcode 383.赎金信
题目链接:leetcode 383. 赎金信
题目分析
1.定义一个数组record记录字符串ransomNote里字符出现的次数,并分别减去各个字符在字符串magazine中出现的次数,若record中有元素大于0返回false,否则返回true;
2.时间复杂度O(n) ,空间复杂度O(1)。
代码
class Solution {
public boolean