链表反转
链表反转, 假设链表为a->b->…->n, 需要用反转a->b之前需要记录b的next指针,因此需要三个指针即可.
反转指针的写法有两种,递归法和循环法.
递归写法
1 | /** |
循环写法
1 | /** |
回文链表判断
- 第一步,找到链表的中间节点
- 第二步,反转起始节点到中间节点的这部分链表
- 从中间节点向两边扩散,检查是否为回文链表
1 | /** |
快速排序(分治法)
1 | int partition(vector<int> nums, int left, int right){ |
归并排序(分治法)
1 | typedef long long LL; |
数组中逆序对个数(分治法)
1 | int64_t reverseNum(vector<int> nums, int low, int high){ |
平面最近点对(分治法)
1 |
|
并查集
1 | class UnionFind{ |
prime 算法
1 | typedef vector<int> VI; |
kruskal算法(贪心法)
1 |
|
dijkstra算法(贪心法)
1 | typedef vector<int> VI; |
spfa(动态规划)
1 | typedef vector<int> VI; |