454.四数相加II
这道题和两数相加的基本思想是一致的,把四组分为两组,把前一对的和作为map的元素,然后看有没有能成为后两组和的相反数的。
383. 赎金信
这个题很快自己可以写出来
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
if(magazine.length()==0) return false;
if(magazine.length()<ransomNote.length()) return false;
unordered_map<char,int> m_map;
char c;
for(int i=0;i<magazine.length();i++)
{
c=magazine[i];
if(m_map.find(c)!=m_map.end())
{
m_map[c]++;
}
else
{
m_map.insert(pair<char,int>(c,1));
}
}
for(int i=0;i<ransomNote.length();i++)
{
c=ransomNote[i];
if(m_map.find(c)!=m_map.end())
{
m_map[c]--;
if(m_map[c]==0) m_map.erase(c);
}
else return false;
}
for(auto it:m_map)
{
if(it.second<0) return false;
}
return true;
}
};
但是运行相对慢,
发现
for(auto it:m_map)
{
if(it.second<0) return false;
}
这一部分多余,时间快一些,如果把unordered_map换成数组可能会更快一些。
15. 三数之和与18.四数之和
三叔之和和四数之和思路是一致的,都是不能够再使用hash表,而是使用双指针。
文章讲述了如何解决四数相加问题的代码实现,原始方法使用unordered_map存储字符及其出现次数。提出将unordered_map替换为数组以提高效率,并指出在检查剩余字符时,双指针策略比直接检查map更高效。

189

被折叠的 条评论
为什么被折叠?



