Algorithm
做一道算法题
题目:二叉树的最大深度,力扣链接: 🔗
示例如下:
输入:root = [3,9,20,null,null,15,7]
输出:3
思路
二叉树根节点的高度就是二叉树的最大深度,所以通过后序求根节点高度来求二叉树最大深度。
可以使用前序遍历,也可以使用后序遍历来解决;使用前序遍历求的是深度,使用后序遍历求的是高度;
- 二叉树节点的深度:从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
- 二叉树节点的高度:从该节点到叶子节点的最长简单路径边的条数或者节点数。
递归法
- 确定递归函数的参数和返回值
int getdepth(TreeNode* node)
- 确定终止条件:为空节点,返回 0,表示高度为 0
if(node == NULL) return 0;
- 确定单层递归的逻辑
int leftdepth = getdepth(node-left); // 左
int rightdepth = getdepth(node->right); // 右
int depth = 1 + max(leftdepth, rightdepth); //中
return depth;
整体代码如下次:
class Solution {
public:
int getdepth(TreeNode* node){
if(node == NULL) return 0;
int left_depth = getdepth(node->left);
int right_depth = getdepth(node->right);
int depth = 1 + max(left_depth, right_depth);
return depth;
}
int maxDepth(TreeNode* root) {
return getdepth(root);
}
};
Review
阅读并点评至少一篇英文技术文章
主要看 NLP 2023 ACL 的文章,链接: 🔗
论文的idea:
EAE (Event Argument Extraction,事件论元抽取) 是 EE (Event Extraction,事件抽取) 的一个重要子任务,EE 任务考虑了事件共现 (Event Co-occurrences,事件共同出现,意思是把事件出现的多条句子作为一个整体去考虑),取得不错的效果,那么 EAE 任务是否也可以采取类似的方式,从而使这两个任务之间的差别没那么大?(因为 EAE 本来就是 EE 领域的子任务)
所以在这个 paper 中,将 EAE 重新表述为表格生成问题,并将基于 SOTA 提示的 EAE 模型 PAIE扩展为非自回归生成框架,以同时提取多个事件的论点。
Technique/Tips
学习至少一个技术技巧
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// 2nd iteration, this can be removed
// y = y * ( threehalfs - ( x2 * y * y ) );
return y;
}
以上函数是采用牛顿法,通过软件的方式进行求平方根倒数的操作。
以下这句,
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
是一个近似操作,是采用牛顿法中的一步,精度可以达到很高。
Share
分享一篇有观点和技术思考的文章
关于高效学习的观点:
-
挑选知识和信息源,应当具有以下特点:应该是第一手资料;权威性高,经过实践检验的;加入了自己的经验和思考。
-
注重基础和原理:“勿在浮沙筑高台”,基础知识和原理知识是经过时间检验过的人类智慧的结晶。
-
知识地图:联想不同知识点的异同,多提问。