1. 常见的数据结构
- 数组(一维、二维)
- 栈
- 队列
- 堆(每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆)
- 父结点索引:(i-1)/2,左孩子索引:2i+1,右孩子索引:2i+2
- 大根堆:arr(i)>arr(2i+1) && arr(i)>arr(2i+2)
- 小根堆:arr(i)<arr(2i+1) && arr(i)<arr(2i+2)
- 链表(单链表、双向链表、双向循环链表)
- 树(二叉树、满二叉树、完全二叉树、平衡二叉树、二分搜索树、红黑树、B-树、B+树、B*树等等)
- 二叉树:任何一个节点的子节点数量不超过2。
- 满二叉树:所有叶子结点都在最后一层,且节点的总数为2^n-1(n为树的高度)。
- 完全二叉树:所有叶子结点都在最后一层或倒数第二层,且节点优先左排列。
- 平衡二叉树:它是一颗空树或左右两个子树的高度差的绝对值不超过1,且子树也是同理。
- 二分搜索树:左节点小于等于根节点值,右节点大于等于根节点值。
- 红黑树:平衡二叉树,根节点和叶子节点黑色,红节点必须有两个黑色节点,从任意节点到叶子节点都包含相同的黑色节点。
2. 递归调用是有代价的,其代价为函数调用和系统栈空间。
3. 按位运算法
- 【&】按位与,两真才为真。
- 【|】按位或,一真就为真。
- 【^】按位异或,不同为真,相同为假。
- 【~】按位非,取反。
4. 逻辑运算符
- 【&&】逻辑与,两真才为真。
- 【||】逻辑或,一真就为真。
- 【!】逻辑非,取反。
5. 位移操作符
- 【<<】左移,右边空位填0。
- 【>>】右移,高位为0则左边空位填0,高位为1则左边空位填1。
- 【>>>】无符号右移,左边空位填0。
6. 按位运算符和逻辑运算符优先级
- 按位运算符 > 逻辑运算符
- 【&】>【^】>【|】>【&&】>【||】