查找与B/B+树

查找的基本概念平均查找长度 ASL = 每个元素 查找概率 找到第i个元素需要进行的比较次数的和。查询效率 主要取决于比较次数。顺序查找法一般线性表的顺序查找a. 若每个元素查找概率相同,则ASL 成功 (1 + 2 + ... + n) / n = (n + 1) / 2


树的重心(DFS解法)

acwing题目链接解题思路题目给出树的边都是***无向边***,所以该树可以被看成是***图***。为什么输出最大值的最小值,因为可能不止一个重心存储方式:a. 邻接矩阵(适合存储***稠密图***)b. 邻接表(***拉链法(本题存法)***)全局变量***ans***的作用(记录最小的最大值)


链表中环的入口节点

###参考环形链表快慢指针扫描法---判断是否有环(巧妙的做法)两个指针first,second分别从起点开始走,first每次走一步,second每次走两步。如果过程中second走到***null***,则说明不存在环。否则当first和second相遇后,让first返回起点,second呆在


八数码(BFS解法)

题目链接采用BFS思路解决八数码问题会遇到以下几个问题:如何表示八数码的一个状态?(string)BFS所需的队列该如何表示?(queue)BFS所需记录距离(这里也可视为移动步数)的dist数组该如何定义?(unordered_map<string, int>)这里unordered_


单链表快排(旷世面试题)

题目有如下限制不能改变val,只能改变链表结构单链表节点结构struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};虚拟出三个链表进行递归right->***-&g


蛇形矩阵(微软面试题)

蛇形矩阵(微软面试题)题目链接用一个x[]={-1, 0, 1, 0}和y[]={0, 1, 0, -1}一个循环代替四个循环。遇到撞墙的边界情况怎么处理(两种情况)?1.撞到边界(int d 决定是否要改变方向)2.已经走过的格子(需要一个标记数组标记是否走过)d = d(d - 1) % 4;


全排列(DFS解法)

题目链接回溯的时候,需要将状态恢复到原有的样子全局数组***int path[N]***记录状态,用于最后的输出开一个***bool st[N]***数组记录哪些数被用过了dfs 函数该怎么实现?void dfs(int u){if (u == n) // 如果已经走到最后一位数字了 {