- 博客(12)
- 收藏
- 关注
原创 剑指Offer——和为S的连续正数序列
和为S的连续正数序列题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和...
2020-02-14 13:50:32 167
原创 剑指Offer——数字在排序数组中出现的次数
数字在排序数组中出现的次数题目描述统计一个数字在排序数组中出现的次数。想法二分找到第一个等于k的位置,和第一个大于k的位置,做差就是出现次数。直接调lower_bound()和upper_bound()。代码class Solution {public: int GetNumberOfK(vector<int> data ,int k) { aut...
2020-02-13 20:36:35 118
原创 剑指Offer——二叉树的下一个结点
二叉树的下一个结点题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。想法要求的是中序遍历的下一个结点,中序遍历的顺序是左根右。那么会有3种可能。有右孩子,那么下一个就是右孩子的最左下角的孩子无右孩子,是父节点的左孩子。那么下一个就是父节点。无右孩子,是父节点的右孩子。那么下一个就是父节点一直...
2020-02-13 19:59:35 181
原创 剑指Offer——平衡二叉树
平衡二叉树题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。想法平衡二叉树定义如下:平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。满足平衡二叉树有两个条件:左右子树高度差不超过1左右子树都是平衡二叉树所以再写一个求树高的函数即可。代码class Sol...
2020-02-13 14:24:45 131
原创 剑指Offer——从上往下打印二叉树
从上往下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。想法二叉树层次遍历,一个bfs。代码class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> ans; queue<Tr...
2020-02-13 13:26:11 101
原创 剑指Offer——包含min函数的栈
包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。想法通过另外一个栈来保存当前栈的最小值。而这个最小值在它被pop时就不再有效,此时有效的最小值是上一个最小值(因此我们需要将最小值存在栈中,以便当前最小值被删除时恢复上一个最小值)。代码class Solution {public: stack<...
2020-02-13 13:19:55 181
原创 剑指Offer——重建二叉树
重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。想法递归处理前序遍历的顺序是:根左右中序遍历的顺序是:左根右所以根一定是pre[0],所以我们可以把整个树拆成三部分来处理当前节点...
2020-02-12 14:38:56 105
原创 简单数据库实现——Part13 - 更新父节点
简单数据库实现——Part13 - 更新父节点接下来一步,我们将处理在分裂叶节点后如何修复父节点。以下面的例子为参考:在我们的例子中,我们将key3添加到树中,这会导致左叶节点分裂。分裂之后我们将通过以下操作来修复树:将父节点中的第一个键更新为左孩子中的最大键(3)在更新key之后添加新的键指对新的指针指向新的子节点新键是新子节点中的最大键(5)因此,首先,用两个新的函数...
2020-02-09 14:42:40 335
原创 简单数据库实现——Part12 - 扫描多级B树
简单数据库实现——Part12 - 扫描多级B树我们现在支持构造一个多级B树,但是这破坏了select语句。下面是一个测试用例,他插入15行,然后尝试打印它们。+ it 'prints all rows in a multi-level tree' do+ script = []+ (1..15).each do |i|+ script << "ins...
2020-02-08 14:26:47 239
原创 简单数据库实现——Part10 - 分裂叶节点
简单数据库实现——Part10 - 分裂叶节点我们的B树现在只有一个节点,这看起来不像是一棵树。所以,我们需要一个将叶节点一分为二的函数,同时创建一个内部节点作为两个新的叶节点的父节点。我们的目标是从:转变为:这时我们不再需要叶节点已满的错误,先删去。 void leaf_node_insert(Cursor* cursor, uint32_t key, Row* value) {...
2020-02-06 11:21:11 324
原创 简单数据库实现——Part9 - 二分搜索和重复键
简单数据库实现——Part9 - 二分搜索和重复键上一部分我们的数据仍然没有排序,这个部分我们会修复这个问题,并检测和拒绝重复的键。现在,我们的execute_insert()函数总是在表的最后插入。而实际上我们应该在表中找到正确的位置插入,并且如果键已经存在,应该返回一个错误。ExecuteResult execute_insert(Statement* statement, Table*...
2020-02-03 13:58:19 169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人