技巧
<<2的n次方 (2 << (n-1) )
>> 除以2 (8>>1)
#include<bits/stdc++.h>包括绝大部分需要用的头文件
vector没有push_front() 、 pop_front()函数、
栈队列
stack、queue不是容器,是容器适配器,底层由deque实现
239.滑动窗口
需要实现单调队列
347.前K个高频元素
考察了优先级队列/大(小)顶堆,可以用priority_queue来做堆
二叉树
深度:根节点->结点 高度:结点->叶子结点
101.对称二叉树
递归,非递归:队列,同时出队,不一致就不对称
104.二叉树的最大深度
递归:1.常规 后序遍历 2.回溯 前序遍历 非递归:层次遍历
111.二叉树的最小深度
递归:1.常规 后序遍历(与最大深度有所不同)
构造出来的树是这样
而最小深度是root到第一个叶子结点的距离
int minDepth(TreeNode* root) {
if(root == nullptr) return 0;
int left = minDepth(root->left)+1;
int right = minDepth(root->right)+1;
return left > right ? right : left;
}
这种代码不管叶子节点,遇到左为空直接返回了。
222.完全二叉树的节点个数
完全二叉树的每个子树都是满二叉树 公式:满二叉树高度h和结点个数的关系
110.平衡二叉树
分清高度和深度,高度从下向上,深度从上向下。高度只能是后序遍历 左右中 平衡二叉树指的是高度差的绝对值不超过1
257. 二叉树的所有路径
回溯算法
404.左叶子之和
递归:左&&叶子的判断, 左右递归
迭代:任意顺序遍历, 加上 左&&叶子的判断
513.找树左下角的值
递归:最后一层最左边,用求深度的回溯算法
迭代:层次遍历最后一层第一个节点
112. 路径总和
分两个题目
路径总和1:遇到即返回,递归有返回值
路径总和2:递归没有返回值,答案用参数传递
106.从中序与后序遍历序列构造二叉树
注意数组拆分[左闭右开)
同理105. 从前序与中序遍历序列构造二叉树
前序和后序不能唯一确定一棵二叉树
操作系统-存储管理
重定位
静态重定位:装入作业时,把所有的指令地址和数据地址换成绝对地址。
动态重定位:直接装载,执行的时候将逻辑地址转换成绝对地址。
段&&页
段式:程序分段,每一个段逻辑地址从0开始,段与段之间不连续,用户分段
页式:物理内存分页,程序虚拟地址空间相应分页,程序逻辑地址分页,系统自动
页面置换算法
LRU
内部碎片vs外部碎片
内部碎片:已经分配给作业但不能被利用的内存空间
外部碎片:没有分配给作业,但由于碎片太小而无法分配给申请内存空间的新进程的存储块