已解决
【代码随想录】算法训练营 第七天 第三章 哈希表 Part 2
来自网友在路上 166866提问 提问时间:2023-10-20 00:47:09阅读次数: 66
最佳答案 问答题库668位专家为你答疑解惑
454. 四数相加
题目
思路
这道题相当于是两数相加的加强版,其实大体思路是一致的,只不过这道题里先把四个数组中的数两两相加,把和作为map的key值,把和出现的次数作为value,这样先遍历完前两个数组,后面再遍历剩余数组时,也是将数组两两相加,不过这次的和就需要用来被0减了,这样就可以知道前两个数组和中有哪些可以和这两个的数组和相加为0,将所有符合条件的value累加,最后就能得到答案了。
代码
class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> umap;for (int a : nums1) {for (int b : nums2) {umap[a + b]++;}}int count = 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. 赎金信
题目
思路
难得又一道自己AC出来的题,虽然只是简单题,但说明我有学以致用!
这道题似曾相识,和之前做过的有效异位词相似,其实就是给出字符串A和B,判断A是不是包含于B,注意要用B中的字母组成A,而且字母的数量也得够,所以这里我就先将B里字母对应的数字作为map的key,字母的数量作为map的value,遍历完B后就得到map,接下来再遍历一下A,如果A中出现了某个map中的key,就将对应的value减一,到最后如果减得一个不剩,那就说明B包含A。
代码
class Solution {
public:bool canConstruct(string ransomNote, string magzine) {unordered_map<int, int> umap;for (int i = 0; i < ransomNote.size(); i++) {umap[ransomNote[i] - 'a']++;}for (int i = 0; i < magzine.size(); i++) {if (umap.find(magzine[i] - 'a') != umap.end() && umap[magzine[i] - 'a'] > 0) {umap[magzine[i] - 'a']--;}}for (int i = 0; i < 26; i++) {if (umap[i] != 0) {return false;}}return true;}
};
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"【代码随想录】算法训练营 第七天 第三章 哈希表 Part 2":http://eshow365.cn/6-19948-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: RT thread 信号量操作
- 下一篇: Java数据结构——应用DFS算法计算流程图下游节点(1)