题目来源于知识星球—英雄算法联盟,五月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、LCP 44.开幕式焰火(简单)
1.题目描述
2.解题思路
用到了哈希表和队列。将根节点放入队列,利用广度优先搜索,将每个扩展出来
的节点放入哈希表,放入之前统计是否出现过并计数。
3.代码演示(C++)
class Solution
{
public:
int numColor(TreeNode* root)
{
int hash[1001],cnt=0;
queue<TreeNode*>q;
memset(hash,0,sizeof(hash));
q.push(root);
while(!q.empty())
{
TreeNode *now=q.front();
q.pop();
if(now)
{
if(!hash[now->val])
{
hash[now->val]=1;
++cnt;
}
q.push(now->left);
q.push(now->right);
}
}
return cnt;
}
};
4.题目链接
二、102.二叉树的层序遍历(中等)
1.题目描述
2.解题思路
将根节点放入队列,入队时记录深度,出队时,根据深度来选择放入结果
数组的哪一层,之后套用广度优先搜索的模板。
3.代码演示(C++)
class Solution
{
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
if(root==nullptr)
{
return {};
}
vector<vector<int>>ret;
unordered_map<TreeNode*,int>dep;
queue<TreeNode*>q;
dep[root]=0;
int predep=-1;
q.push(root);
while(!q.empty())
{
TreeNode* n=q.front();
q.pop();
if(dep[n]!=predep)
{
ret.push_back({n->val});
predep=dep[n];
}
else
{
ret.back().push_back(n->val);
}
if(n->left)
{
dep[n->left]=dep[n]+1;
q.push(n->left);
}
if(n->right)
{
dep[n->right]=dep[n]+1;
q.push(n->right);
}
}
return ret;
}
};
4.题目链接
三、1609.奇偶树(中等)
1.题目描述
2.解题思路
不会做,下次一定!
3.代码演示(C++)
4.题目链接
四、1263.推箱子(困难)
1.题目描述
2.解题思路
困难题我直接放弃好吧?
3.代码演示(C++)
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!