LeetCode题目

  1. LeetCode题目
    • 234.【回文链表】
      解题思路:使用链表的后序遍历,然后比较。该方法时间复杂度O(n),空间复杂度O(n)
      • 进阶:能否使用O(n)时间复杂度和O(1)空间复杂度完成
        解题思路:使用快慢指针,找到链表的中点,然后反转链表的后半段,最后遍历链表并比较。该算法时间复杂度为O(n),空间复杂度O(1)
    • 141.【环形链表】
      • 进阶:142.【环形链表II】

解题技巧

  1. 双指针技巧
    1. 快慢指针
      一般用于链表的算法中
    2. 左右指针
      一般用于数组的算法中

实用算法

  1. Unio-Find算法

    1. 介绍
      Union-Find算法,又被称为并查集算法。是用来解决图的动态连通性问题

    2. Union-Find算法实现的API

       void union(Node o1, Node o2) -- 连通两个节点
       boolean connected(Node o1, Node o2) -- 判断两个节点是否连通
    3. Union-Find算法可以使用森林实现图的动态连通性,使用数组来模拟这个森林。数组中的每个元素,都代表每个节点,而元素的值,代表该元素所连通(指向)的元素。每个森林的节点,开始时默认都是和自己连通。

    4. Union-Find算法的数据结构

    5. 通过对Union-Find的分析,可以知道Union-Find算法的时间复杂度取决于find()函数,并且时间复杂度为O(n)。线性时间复杂度对于解决图论问题是不足的,因此需要想办法将时间复杂度降低。

    6. Union-Find算法更好的数据结构