1003-1009

77 阅读3分钟

技巧

<<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.常规 后序遍历(与最大深度有所不同) image.png
构造出来的树是这样
image.png
而最小深度是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和结点个数的关系2h12^h-1

110.平衡二叉树

分清高度和深度,高度从下向上,深度从上向下。高度只能是后序遍历 左右中 平衡二叉树指的是高度差的绝对值不超过1

257. 二叉树的所有路径

回溯算法

404.左叶子之和

递归:左&&叶子的判断, 左右递归
迭代:任意顺序遍历, 加上 左&&叶子的判断

513.找树左下角的值

递归:最后一层最左边,用求深度的回溯算法
迭代:层次遍历最后一层第一个节点

112. 路径总和

分两个题目 路径总和1:遇到即返回,递归有返回值
路径总和2:递归没有返回值,答案用参数传递

106.从中序与后序遍历序列构造二叉树

注意数组拆分[左闭右开)
同理105. 从前序与中序遍历序列构造二叉树
前序和后序不能唯一确定一棵二叉树

操作系统-存储管理

重定位

静态重定位:装入作业时,把所有的指令地址和数据地址换成绝对地址。
动态重定位:直接装载,执行的时候将逻辑地址转换成绝对地址。

段&&页

段式:程序分段,每一个段逻辑地址从0开始,段与段之间不连续,用户分段
页式:物理内存分页,程序虚拟地址空间相应分页,程序逻辑地址分页,系统自动

页面置换算法

LRU

内部碎片vs外部碎片

内部碎片:已经分配给作业但不能被利用的内存空间
外部碎片:没有分配给作业,但由于碎片太小而无法分配给申请内存空间的新进程的存储块