1,序列化和反序列化BST/常规二叉树
常规二叉树要考虑空节点问题,使用List,不断erase begin,获取front
BST无需考虑空节点,使用vector<TreeNode*>vec,不断插入,最后bstInsert,平衡左右。获得插入。
可以再练习一下。
2,手写LRU
map用来存put的key和value
visited用来记录版本号,visited(x) = y,表示x是第y次的访问。
用queue<{pair, pair}>就操作时的版本号
当缓存不够时,需要确认哪一个需要pop
当时的版本号和现在的版本号相同的,说明没有被操作过,也就是最久没有被访问过。
设三个变量
map<int, int>mp,visited
queue<{pair, pair}>que
int cnt,totalCap,currCap;cnt是版本机制。
可以再练习一下。
4,遍历二叉树 前序,中序,后续
5,合并区间
6,无重复字符的最长子串
7, 最长连续序列
8,不同岛屿的数量
9,岛屿问题
10
求二叉树叶子最浅深度,
二叉树叶子次之深度
leetcode前两百
通配符模式的匹配
-最大子序列和 考虑边界和内存
最大序列乘积(
检测环形链表
内核态和用户态的区别,什么时候会陷入内核态,c访问空指针会不会进入内核态
- self-intro
- introduce your project
- From the perspective of tech, what is you strength?
- 第三个问题我答了自己会比较在意代码质量
- What do you think is important for high quality of you code?
- If you receive the code which is not live up to the standards you mentioned, what will you do?
删掉一个字符串中的所有IP地址
图片90度翻转。
完全背包问题
0-1背包问题
一棵树,实现序列化和反序列化。
表达式求值,只有求值
https://leetcode-cn.com/problems/coin-change-2/
考虑特殊输入
二维数组是否可以连通,1-有路, 0 无路
两个点的距离,求两个坐标的最短距离(单源最短路)
LRU
LFU
给只有一个0,1,2的数组排序
字符串压缩,考虑异常输入
大树相加,数据太大户不会爆掉内存
有序数组,找出缺失的一个数,比如1,2,3,5,缺失4
旋转图像
https://leetcode-cn.com/problems/rotate-image/
下一个更大元素
https://leetcode-cn.com/problems/next-greater-element-i/submissions/
https://www.nowcoder.com/practice/ae25fb47d34144a08a0f8ff67e8e7fb5?tpId=117&&tqId=37867&rp=1&ru=/activity/oj&qru=/ta/job-code-high/question-ranking
切分数组
https://leetcode-cn.com/problems/qie-fen-shu-zu/
二叉树公共祖先
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
搜索二叉树公共祖先
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/submissions/
零钱兑换
翻转字符串 --常规题
给定一个无序链表和一个数字,把比这个数字大的放在后面,比这个数字
小的放在前面,要求稳定性。使用partition
对BST进行序列化和反序列化
https://leetcode-cn.com/problems/serialize-and-deserialize-bst/submissions/
岛屿数量–常规题
判断链表是否有环–
快排
二叉树排序
atoi实现
c++类,虚函数实现
new和malloc区别
class大小,包含virtual大小
虚表指针指向哪里?
进程和线程关系
强引用和弱引用
bfs问题,岛屿问题
链表翻转
LC200–岛屿
LC69=
L113,LC1,是否为合法三角形
矩形从左上走到右下
归并排序的推导,还有实现
手写LRU
class LRUCache {
public:
map<int,int> mp, vis; // 使用map存储键值 + 版本号机制
queue<pair<int,int>> que;
int cnt, cap, currSize;
LRUCache(int capacity) {
cap = capacity; // 容量
cnt = 0; // 用来位置版本号
currSize = 0; // 当前缓存的个数
}
int get(int key) {
// 如果在visited中找不到key, return -1
if (vis[key] == 0) {
return -1;
}
// 一把更新,cnt用来维持版本号,保证每次版本号都不同
que.push({key, vis[key] = ++ cnt});
return mp[key];
}
void put(int key, int value) {
// 如果当前的版本号和现在的版本号一样,说明没有被操作过,也就是最久没有被访问过的,需要被pop
if(!vis[key]){
while(currSize == cap){
auto front = que.front();
que.pop();
if(vis[front.first] == front.second){
// 这里是把它降为0,而不是erase
vis[front.first] = 0;
--currSize;
break;
}
}
++currSize;
}
mp[key]=value;
que.push({key,vis[key] =++cnt});
}
};