算法笔记|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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值