代码随想录算法训练营第七天| 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

四数相加II

454.四数相加II
本题一共四个数组,那么分成2-2,前2个数组的元素存入map,后2个数组的元素去查找,注意当找到对应的元素时,不能简单加1,而是加map对应的值,另外注意使用getOrDefault方法,比较简便

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int sum = 0;
        Map<Integer,Integer> map = new HashMap();
        for (int i : nums1) {
            for (int j : nums2) {
                //getOrDefault方法
                map.put(i + j, map.getOrDefault(i + j, 0) + 1);
            }
        }
        for (int i : nums3) {
            for (int j : nums4) {
                sum += map.getOrDefault(- i - j, 0);
            }
        }
        return sum;
    }
}

赎金信

383. 赎金信
本题比较容易想到使用哈希方法统计各个字母出现的个数,可以使用map和数组,但是map消耗资源更多,所以选择数组,和哈希表第一题类似

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] arr = new int[26];
        if (ransomNote.length() > magazine.length()) {
            return false;
        }
        for (char c : magazine.toCharArray()) {
            arr[c - 'a'] ++;
        }
        for (char c : ransomNote.toCharArray()) {
            arr[c - 'a'] --;
        }
        for (int i : arr) {
            if (i < 0) {
                return false;
            }
        }
        return true;
    }
}

三数之和,四数之和后续补充

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容