从尾到头打印链表
快慢指针,如果要求的k大于链表长度的话 需要特殊判断一下
字符串的排列
不知道怎么写辅助函数
链表删除重复元素
写的不怎么顺畅 常常报段错误
调整数组顺序使奇数位于偶数前面
不会用log
顺时针打印矩阵
第二个for循环条件 记错了
丑数
不知道怎么初始化等,不会写
字符流中第一个不重复的字符
判断条件 应该 >= 0 初始化为-1,然后每次出现 从0开始,如果是第二次出现,记为-2
孩子们的游戏(圆圈中最后剩下的数)
记得要首先判断异常值,否则程序会崩溃
构建乘积数组
下标出问题 应该是 left[i] = left[i - 1] * A[i - 1]
旋转数组
不知道停止条件 ->
while(array[left] > array[right]){
if(right - left == 1){
return data[left];
}
}
最小的K个数
优先级队列的使用
priority_queue<int, vector<int>, greater<int> > pq; // 小元素具有较高优先级
树的子结构
段错误
二叉搜索树的后序遍历序列
索引 总是写错
二叉树中和为某一值的路径
不会写
剪绳子
dp递归公式
序列化和反序列化
没印象 不知道怎么下手
先序遍历
数组中只出现一次的数字
可以再练习一遍
数组中的逆序对
归并排序
正则表达式匹配
不会
将二叉搜索树转链表
不会
LRU链表
插入时,超过指定容量,需要从unorder_map中进行删除
两个链表相加
不知道怎么生成节点
图
- 应该遍历总得结点,如果结点中有出入为0的,push进去
- 初始化,第二个参数应该声明为空的vector
前缀树
节点不知道怎么定义 Node* node[26]
股票收益
- buy[i] = max(buy[i - 1], sell[i - 2] - prices[i])
- sell[i] = max(sell[i - 1], buy[i - 1] + prices[i])
站队问题
- 需要记住插入的方式,第一个参数是迭代器指向具体的位置,第二个参数为要插入的值
- res.insert(res.begin() + i[1], i)
完美平方数
- dp[i] = min(dp[i], dp[i - j * j])
查找重复字符串的位置
- 先统计各个字符串出现的次数
- 然后一个size的序列进行查找
- 查找到了就减1,中间小于1就直接break
下一个排列
- 从后往前看,找到开始递减的数字,记为temp1,
- 然后从后找,找到第一个比temp1大的数字,记为temp2
- 然后temp1 与 temp2 进行互换
- 然后把temp2的后面的数字全部进行转换
解析字符串
- 用到栈
二叉树的非递归遍历
- 不需要判断 node -> right 是否为空
- 我们只需要直接赋值即可
矩形的环形遍历
- row - 1 - i != i
- col - 1 - i != i
dfs转换讲O转换成X
- 遍历四周,将连接的转换成另外一个数字
- 注意在遍历的时候,要记得判断转换的字符
复杂链表的赋值
- 最后拆分链表时,有点困难
- 需要先移动头指针
旋转数组的搜索
- 二分 带等于号
- 然后返回 data[mid] // 有个break条件