精品推荐:
《征服数据结构》专栏:50多种数据结构彻底征服
《经典图论算法》专栏:50多种经典图论算法全部掌握
最近一双非网友发文称一天收到10个公司的笔试,双非仔的春天要来了。我觉得这才是找工作的正确方式,如果学历一般,找工作就应该多投,这样机会才会更多。
有的人担心面试多了,万一他们都给我发offer,我不好意思拒绝,该怎么办?你想多了,先让她们给你发offer在说吧。就算拒绝也很正常,HR在挑人的时候不是一直在拒绝吗,也没见她不好意思。
就像之前一个网友发的《每天坚持投5家简历》,后面都快奔溃了。每天才 5 家,就算是在厉害的学校也不可能每天收到10个offer,所以无论是25届的,还是现在找工作的,大胆投,不要瞻前顾后,这样你的春天就会来了。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第938题:二叉搜索树的范围和。
问题描述
输入:root = [10,5,15,3,7,null,18], low = 7, high = 15
输出:32
输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
输出:23
树中节点数目在范围 [1, 2 * 10^4] 内
1 <= Node.val <= 10^5
1 <= low <= high <= 10^5
所有 Node.val 互不相同
问题分析
public int rangeSumBST(TreeNode root, int low, int high) {
if (root == null)
return 0;
int res = 0;
if (root.val >= low && root.val <= high)
res += root.val;
if (root.val < high)
res += rangeSumBST(root.right, low, high);
if (root.val > low)
res += rangeSumBST(root.left, low, high);
return res;
}
public:
int rangeSumBST(TreeNode *root, int low, int high) {
if (root == nullptr)
return 0;
int res = 0;
if (root->val >= low && root->val <= high)
res += root->val;
if (root->val < high)
res += rangeSumBST(root->right, low, high);
if (root->val > low)
res += rangeSumBST(root->left, low, high);
return res;
}
def rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
if root is None:
return 0
res = 0
if low <= root.val <= high:
res += root.val
if root.val < high:
res += self.rangeSumBST(root.right, low, high)
if root.val > low:
res += self.rangeSumBST(root.left, low, high)
return res
数组,稀疏表(Sparse Table),单向链表,双向链表,块状链表,跳表,队列和循环队列,双端队列,单调队列,栈,单调栈,双端栈,散列表,堆,字典树(Trie树),ArrayMap,SparseArray,二叉树,二叉搜索树(BST),笛卡尔树,AVL树,树堆(Treap),FHQ-Treap,哈夫曼树,滚动数组,差分数组,LRU缓存,LFU缓存
……
图的介绍,图的表示方式,邻接矩阵转换,广度优先搜索(BFS),深度优先搜索(DFS),A*搜索算法,迭代深化深度优先搜索(IDDFS),IDA*算法,双向广度优先搜索,迪杰斯特拉算法(Dijkstra),贝尔曼-福特算法(Bellman-Ford),SPFA算法,弗洛伊德算法(Floyd),卡恩(Kahn)算法,基于DFS的拓扑排序,约翰逊算法(Johnson)
……