代码随想录算法训练营第七天

208 阅读1分钟

day7 454.四数相加II 题目链接:leetcode.cn/problems/4s…

巧妙使用map解决问题,并且最大化时间效率。 代码如下:

public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int, int> umap;//key:a+b的值, value:a+b出现的次数
        for (int a : nums1) {
            for (int b : nums2) {
                umap[a + b]++;
            }
        }
        int count = 0;//计算a + b + c + d = 0的次数
        for (int c : nums3) {
            for (int d : nums4) {
                if (umap.find(0 - (c + d)) != umap.end()) {
                    count += umap[0 - (c + d)];
                }
            }
        }
        return count;
    }
};


 383. 赎金信
题目链接:https://leetcode.cn/problems/ransom-note/
算是复习题了
代码如下:
```class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int record[26] = {0};
        if (ransomNote.size() > magazine.size()) {//当前者比后者大则不符合题意,直接false
            return false;
        }
        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) {//当ransomNote[i]-'a' < 0时,证明magazine里没有ransomNote所需的字符
                return false;
            }
        }
        return true;

    }
};```

 15. 三数之和 
题目链接:https://leetcode.cn/problems/3sum/