摘要:
**基础知识** 1.递推基础知识: 斐波那契(Fibonacii)数列的递推公式:F(n) = F(n -1) + F(n - 2); 70. 爬楼梯: Fibonacci 的最直接体现; 前置知识: 数学归纳法: a: 验证k0 成立; (边界条件) b: 证明如果ki 成立,那么Ki+1 也成 阅读全文
摘要:
**基础知识** 红黑树的基本性质:(红黑树是弱化版的AVL 树) 1. 每个节点非黑即红; 2. 根节点是黑色; 3. 叶节点(NIL(Null-pointer to objective))是黑色的; 在示意图中没有画出来的NIL!! 在删除操作中很重要,删除操作中主要就是处理双重黑失衡; 4. 阅读全文
摘要:
**基础知识** 二叉排序树(二叉搜索树):思维结构中可以是有序数组,树; 性质: 左子树 < 根节点 ; 右子树 > 根节点; 中序遍历结果:就是递增排序的有序序列;(3,17, 20, 28, 28, 29, 30, 32) 操作: 增(插入): 与根结点比较:小于:进入左子树;大于:进入右子树 阅读全文
摘要:
**基础知识** 单调队列(monotone-Queue):重点关注队首元素 目的: 主要为了解决RMQ(range Minimum/Maximum Query) 区间最值问题; 如果不移除开头元素,则最终deque 中留下的元素,则是用来解决固定末尾RMQ问题; 本质来讲,由每次往后移位后对应的d 阅读全文
摘要:
**基础知识** 关键字 : #define / #undef / #ifdef / #ifndef //注意与typedef / inline之间差别; #define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的) 是预 阅读全文
摘要:
**基础知识** 哈希表:为了解决快速索引树问题的结构 数组中根据下标可以O(1) 实现数据获取; 但是在实际应用中,可能要根据复杂的数据结构来查找数据; 所以要实现将任意数据 到 数组下标的映射就可以实现任意类型数据之间的关联,实现O(1) 查找; 哈希函数: 任意数据 到 数组下标的映射; 体现 阅读全文
摘要:
**基础知识** 1.二分算法:二分的是问题规模,减少无用范围; a. 二分查找: 对顺序查找的优化, 二分的是区间范围;最终找到的结果是在区间范围内,满足条件的位置(隐藏的含义是,最终找到的可能是最左边/右边的位置,这也是对于代码处理过程要注意的边界条件); 基本过程: min 是头指针; max 阅读全文
摘要:
**基础知识** 排序算法重要性: 问题系统熵决定了一个问题被解决的难易程度,排序可以有效降低熵值; 排序中有很多算法中都有分治的思想; **代码演示** 1. 一些基本的排序方法及优化(选择,冒泡,插入排序, 堆排序); 注意边界条件,特别是递归中下一次递归的范围没有减少,就会陷入死循环中; 对于 阅读全文
摘要:
**基础知识** Union-find 是一种抽象化较高的数据结构,主要用来处理联通性问题,联通性自身具有传递性; 参考文章: 并查集(Union-Find)算法介绍 & 应用举例 1 //#include "UnionSet.h" 2 #include <iostream> 3 using nam 阅读全文
摘要:
**基础知识** 1. 应用 完全二叉树 结构,通过连续数组空间储存( 左子树:2 * n, 右子树 : 2 * n + 1; root = 1) , 实现一个完全二叉树; 要学会 数组(表现形式) 与 完全二叉树 (思维结构)之间的转换! 数据结构:本质就是定义一种性质,并在所有操作中都要维护这种 阅读全文