(C++哈希02) 四数相加 赎金信

454、四数相加II

用两个for循环记录前两个数组元素两两之间的和,再用两个for循环记录后两个数组元素两两之间的和,四数相加就简化为两数相加,用map来查找结果

cpp 复制代码
class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int,int> map;
        for(int i = 0; i < nums1.size(); i++) {
            for(int j = 0; j < nums2.size(); j++) {
                map[nums1[i] + nums2[j]]++;
            }
        }
        int count = 0;
        for(int i = 0; i < nums3.size(); i++) {
            for(int j = 0; j < nums4.size(); j++) {
                int flag = 0 - nums3[i] - nums4[j];
                if(map.find(flag) != map.end()) {
                    count += map[flag];
                }
            }
        }
        return count;
    }
};

时间复杂度:O(n*n)

空间复杂度:O(n*n)

383、赎金信

字母的数量是有限的,所以可以用数组来模拟哈希

cpp 复制代码
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int record[26] = {0};
        for(int i = 0; i < magazine.length(); i++) {
            record[magazine[i] - 'a']++;
        }
        for(int i = 0; i < ransomNote.length(); i++) {
            record[ransomNote[i] - 'a']--;
            if(record[ransomNote[i] - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
};

时间复杂度:O(n)

空间复杂度:O(1)

相关推荐
no_play_no_games29 分钟前
[模板]树的最长路径
算法·深度优先·图论·树形结构
tan77º1 小时前
【C++】异常
c++·算法
ymchuangke1 小时前
数据清洗-缺失值处理-缺失值可视化图(竖线)
python·算法·数学建模
我要学编程(ಥ_ಥ)1 小时前
滑动窗口算法专题(1)
java·数据结构·算法·leetcode
niceffking1 小时前
JVM 一个对象是否已经死亡?
java·jvm·算法
大油头儿1 小时前
排序算法-冒泡排序
数据结构·算法·排序算法
地平线开发者2 小时前
地平线占用预测 FlashOcc 参考算法-V1.0
算法·自动驾驶
LluckyYH2 小时前
代码随想录Day 46|动态规划完结,leetcode题目:647. 回文子串、516.最长回文子序列
数据结构·人工智能·算法·leetcode·动态规划
源代码:趴菜2 小时前
LeetCode118:杨辉三角
算法·leetcode·动态规划
luluvx2 小时前
LeetCode[中等] 74.搜索二维矩阵
算法·leetcode·矩阵