美文网首页
数据结构与算法笔记

数据结构与算法笔记

作者: 读书三万本 | 来源:发表于2020-07-03 22:59 被阅读0次

    1 数据结构

    • 列表,基本数据结构,顺序存储结构,可以通过索引快速查找元素,删除和增加元素比较麻烦,特别是增加元素可能要开辟新的存储空间。
    • 链表,基本数据结构,链式存储结构,通过node.next访问下一个元素,只能从根节点开始查找元素,元素删除和插入比较简单,不用使用连续的存储空间。
    • 队列,一种只允许先进先出的存储结构,支持(enqueue、dequeue功能)
    • 栈,一种只允许后进先出的存储结构,支持pop、push,查看head值的功能
    • 堆(最大堆/最小堆),一种特殊的完全二叉树,堆顶式是最大值或者最小值,堆可以完全通过一个列表存储,满足:node.parent = i/2, node.left=2i, node.right=2i+1。堆支持插入(直接在堆的最后一个位置插入一个元素,然后维护堆的性质)和删除操作(堆顶和队尾元素交换,然后维护堆的性质)。堆可以用于堆排序、优先级队列(支持最大值有限弹出)中。
    • 二叉树,node.value,node.left, node.right。
      • 搜索二叉树,指根节点一定比左树的所有节点大,一定比右子树的所有节点值小
      • 完全二叉树,树的深度为h,h-1层必须是满的,h层优先填满左边叶节点,可以用数组存储,可以分解为完全二叉树和满二叉树
    • 单调栈,保证堆顶式最大的,解决Next greater Number问题
    • 单调队列,队列首是最大的

    2 算法

    • 动态规划:一般用于求解最值,当问题的解可以通过子问题的解来得到时使用,通常子问题存在重叠,通过存储中间结果来减少重复计算。
      • 状态定义,确定状态是什么,动态表存储什么
      • 转移函数,确定选择并泽优
      • 明确边界/badcase,递归时是终止条件;使用dp-table时是初始值的选取
    • 二分查找:一个问题一分为二,
    • 双指针:通过两个指针优雅地解决问题,在链表的相关问题中常用
    • BFS(广度优先):
    • DFS(深度优先):
    • 滑动窗口:

    相关文章

      网友评论

          本文标题:数据结构与算法笔记

          本文链接:https://www.haomeiwen.com/subject/dzzeqktx.html