LeetCode题目
- LeetCode题目
- 234.【回文链表】
解题思路:使用链表的后序遍历,然后比较。该方法时间复杂度O(n),空间复杂度O(n)- 进阶:能否使用O(n)时间复杂度和O(1)空间复杂度完成
解题思路:使用快慢指针,找到链表的中点,然后反转链表的后半段,最后遍历链表并比较。该算法时间复杂度为O(n),空间复杂度O(1)
- 进阶:能否使用O(n)时间复杂度和O(1)空间复杂度完成
- 141.【环形链表】
- 进阶:142.【环形链表II】
- 234.【回文链表】
解题技巧
- 双指针技巧
- 快慢指针
一般用于链表的算法中 - 左右指针
一般用于数组的算法中
- 快慢指针
实用算法
Unio-Find算法
介绍
Union-Find算法,又被称为并查集算法。是用来解决图的动态连通性问题Union-Find算法实现的API
void union(Node o1, Node o2) -- 连通两个节点 boolean connected(Node o1, Node o2) -- 判断两个节点是否连通
Union-Find算法可以使用森林实现图的动态连通性,使用数组来模拟这个森林。数组中的每个元素,都代表每个节点,而元素的值,代表该元素所连通(指向)的元素。每个森林的节点,开始时默认都是和自己连通。
Union-Find算法的数据结构
通过对Union-Find的分析,可以知道Union-Find算法的时间复杂度取决于find()函数,并且时间复杂度为O(n)。线性时间复杂度对于解决图论问题是不足的,因此需要想办法将时间复杂度降低。
Union-Find算法更好的数据结构