算法学习笔记

  1. 常用数据结构和技巧
    • 数组、字符串
      数组优点:构建简单,按下标查找快。
      缺点:需连续分配存储空间,查询某元素是否存在要遍历整个数组,添加删除也是。

    • 链表
      链表优点:灵活分配空间,快速添加删除
      缺点:查询慢。
      技巧:快慢指针;构建一个虚假链表头
      【例】k个一组翻转链表
      若链表长度小于k,返回原链表
      用三个指针prev、cur、next,将cur下一个节点保存到next指针,然后cur指针指向prev,然后cur和prev一起前进一步。不断重复以上步骤直到完毕。


    • 特点:后进先出。
      思想:可以用一个单链表来实现;只关心上一次操作;处理完上一次操作后,能在O(1)内查找到更前一次操作。
      【例】有效括号
      用一个栈,往里面压左括号,一旦遇上一个右括号,就把栈顶的左括号弹出来,说明合法,直到最后,来判断栈里还有没有左括号。
      【例】每日温度
      把第一天的压入栈,第二天比第一天高,则第一天出栈,得到只需要一天,再第二天入栈。。。若后一天比前一天低,就压入栈,若比前一天高,就出栈。

    • 队列
      先进先出。
      运用双链表。

    • 双端队列
      队列头尾都能在O(1)内查看、添加、删除数据。常用:实现一个长度动态变化的窗口。
      【例】滑动最大窗口
      利用双端队列,保存当前窗口中最大的数的下标,新的头总是当前窗口最大的数,若新的队列已经不包含原来最大的数,就把旧的数从队头删除。


    • 一般考察递归算法。
      普通/平衡/完全二叉树、二叉搜索树、多叉树
      前序/中序/后序遍历的递归/非递归写法
      【例】二叉搜索中第k小的元素
      对树进行中序遍历,当访问到第k个元素,返回结果

你可能感兴趣的:(算法学习笔记)