Leetcode刷题之旅1

Leetcode刷题之旅1

先从剑指offer66题开始刷

  1. 链表可创建dummy哑节点指向头指针,目的是为了对头节点进行操作
    例子:删除链表中重复节点
  2. 确定有限状态自动机
    例子:剑指offer20 表示数值的字符串
    确定有限状态自动机(以下简称「自动机」)是一类计算模型。它包含一系列状态,这些状态中:
    有一个特殊的状态,被称作「初始状态」。
    还有一系列状态被称为「接受状态」,它们组成了一个特殊的集合。其中,一个状态可能既是「初始状态」,也是「接受状态」。
    起初,这个自动机处于「初始状态」。随后,它顺序地读取字符串中的每一个字符,并根据当前状态和读入的字符,按照某个事先约定好的「转移规则」,从当前状态转移到下一个状态;当状态转移完成后,它就读取下一个字符。当字符串全部读取完毕后,如果自动机处于某个「接受状态」,则判定该字符串「被接受」;否则,判定该字符串「被拒绝」。
    注意:如果输入的过程中某一步转移失败了,即不存在对应的「转移规则」,此时计算将提前中止。在这种情况下我们也判定该字符串「被拒绝」。
    一个自动机,总能够回答某种形式的「对于给定的输入字符串 S,判断其是否满足条件 P」的问题。在本题中,条件 P 即为「构成合法的表示数值的字符串」。
    自动机驱动的编程,可以被看做一种暴力枚举方法的延伸:它穷尽了在任何一种情况下,对应任何的输入,需要做的事情。
    自动机在计算机科学领域有着广泛的应用。在算法领域,它与大名鼎鼎的字符串查找算法「KMP」算法有着密切的关联;在工程领域,它是实现「正则表达式」的基础。
  3. 链表相关
    (1)链表倒数第k个元素,中间的元素
    快慢指针
    (2)链表是否有环,环的长度,环的入口
    快慢指针,如果有环那么必定相遇。从第一次相遇到第二次相遇的差值即为环的长度。找到长度之后从头结点遍历,双指针,快指针先走len(环)步,然后二者一次走一步,第一次相遇的节点就是入口(各自走了k步)
    剑指offer22 Leetcode题解
    (3)鲁棒性的考虑
    链表是否为空 或者一个节点;是否需要对头节点进行操作,如果需要的话可以引入dummy哑节点指向头节点。
    基础:倒数第k个,环,反转,删除
    4.树
    树一般用递归(dfs,bfs,有时候可能双重递归,如剑指offer26),不用递归可以采用栈来进行循环遍历。
    基础:已知前序中序求后序;树的镜像树B是否是树A的子树
    PS.树的前中后遍历以及递归非递归遍历一定要搞清楚
    5.快排
    单路,双路,三路快排,荷兰国旗问题。
    经典快排在含有大量重复元素时会降至O(n^2)
    采用三路快排

猜你喜欢

转载自blog.csdn.net/m0_46162954/article/details/113417465