1.1.1 增删查改;
1.1.2 翻转链表:(1)头插法;(2)尾插法;
1.1.3 判断有无环、环的起始节点:(2)快慢指针;(2)哈希表;
1.1.4 通用技巧:(1)快慢指针;(2)当头结点不确定时,建立dummy使得dummy->next = head;
1.2.1 二叉树的非递归遍历:(1)前序;(2)中序;(3)后序;
1.2.2 栈实现队列、队列实现栈:(1)翻转来翻转去;
1.2.3 下一个更大的数、气温问题:(1)从后往前入栈;
1.2.4 通用技巧:(1)数组等的翻转、倒叙等情况下考虑栈;(2)所有的递归均可使用栈实现;(3)stl库:stack、list、queue、deque;
1.3.1 最短子串、连续字符串问题:(1)滑动窗口;
1.3.2 通用技巧:(1)字符操作,建立table(26, 0),哈希思想;
1.4.1 遍历、树的深度、树的叶子节点个数、更大的树、左叶子个数等:(1)前序、中序、后序的DFS遍历;(2)前序、中序、后序的stack遍历;(3)层序queue遍历;
1.4.2 BST和数组转换:(1)二分查找;
1.4.3 通用技巧:(1)DFS,stack前中后序遍历;(2)queue层序遍历;
1.5.1 最大K个元素问题:(1)pq;
1.5.2 通用代码:
struct node{
int num;
string str;
node(int n, const string& s): num(n), str(s) {}
};
struct cmp{
template
bool operator()(const T& left, const T& right){
return left.num >= right.num; // >=是小根堆,单增;
}
};
priority_queue
...
1.6.1
/*
解法一:邻接矩阵,DFS;
*/
// class Solution {
// public:
// void dfs(const vector
// int i) {
// table[i] = true;
// for (int j = 0; j < isConnected[i].size(); ++j) {
// if ((isConnected[i][j] == 1) && (table[j] == false))
// dfs(isConnected, table, j);
// }
// }
// int findCircleNum(vector
// vector