代码随想录算法训练营第7天|454.383.15.18

151 阅读1分钟

学习资料

programmercarl.com/0454.%E5%9B…

454.四数相加II

第一思路

遍历前三个数组里得元素得和,然后在第四个数组里找是否存在相反数.

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        // 
        int count = 0;
        unordered_map<int,int> umap;
        for (int i = 0; i < nums4.size(); i++) {
            umap.emplace(pair<int,int>(nums4[i],i));
        }
        
        for (int i = 0; i < nums1.size(); i++) {
            for ( int j = 0; j < nums2.size();j++) {
                for (int k = 0; k < nums3.size(); k++) {
                    int sum = nums1[i] + nums2[j] + nums3[k];
                    if (umap.find(-sum) != umap.end())
                        count++;
                }
            }
        }
        return count;

    }
};

结果报错了

383 赎金信

第一思路

将magazine 映射到hash数组26,存储每个单词得次数, 遍历ransomNote,每使用一个,hash数组里的次数减1, 最后看hash数组里是否有元素小于0.

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int hash[26] = {0};
        for (char s: magazine) {
            hash[s - 'a']++;
        }
        for (char s : ransomNote) {
            hash[s - 'a']--;
        }
        for (int i = 0; i < 26; i++) {
            if (hash[i] < 0)
                return false;
        }
        return true;

    }
};

结果一次AC

总结

虽然ac了,但是忘记了一个条件(虽然这个条件没啥必要),就是a串的长度要小于等于b串,然后第三个for实际上是可以写在第二个里面的.

15. 三数之和

第一思路

暴力解法先搞一哈

总结

还是想不到

18

第一思路