KM的博客.

算法实战

字数统计: 1.2k阅读时长: 4 min
2019/06/22

为什么学算法?

为什么要学习算法?

  • 算法是内功,决定你武功的高度
  • 算法能让你更好更快理解一门语言系统的设计理念
  • 算法能让你触类旁通
  • momo算法题:接雨水 反转链表II 旋转矩阵

主要算法

  • 基础技巧:分治、二分、贪心
  • 排序算法:快速排序、归并排序、计数排序
  • 搜索算法:回溯算法、递归、深度优先遍历,BFS广度优先遍历,二叉搜索树等
  • 图论:最短路径、最小生成树
  • 动态规划:背包问题、最长子序列

数据结构

  • 数组与链表:单 / 双向链表
  • 栈与队列
  • 哈希表
  • 堆:最大堆 / 最小堆
  • 树与图:最近公共祖先、并查集
  • 字符串:前缀树(字典树) / 后缀树

1、常见数据结构

数组 链表 栈 队列 树

链表


    1. 删除链表中的节点
    1. 单链表反转
    1. 环形链表 & II
    1. 合并两个有序的链表
    1. 删除链表倒数第n个结点
    1. 求链表的中间结点

      1. 两数相加 Meidum
    1. 删除链表的倒数第N个节点 Medium
    1. 两数相加 II Medium
    1. 删除链表中的节点 Easy
    1. 奇偶链表
    1. 反转链表 Easy
    1. 反转链表 II Medium
    1. 两两交换链表中的节点 Medium
      方法1:非递归
      方法2:递归
    1. 相交链表 Easy
    1. 回文链表 Easy
    1. 合并两个有序链表 Easy
    1. 环形链表 Easy
  • 13)环形链表 II Medium
    方法1:Hash
    方法2:快慢指针(Floyd 算法)
    方法3:快慢指针(普通法)

2、高级数据结构

3、排序

  • 冒泡排序
  • 插入排序
  • 归并排序
  • 快速排序
  • 拓扑排序

4、递归与回溯

  • 解码的方法
  • 中心对称数
  • 组合总数
  • N皇后

5、深度优先于广度优先搜索

  • 深度优先于广度优先搜索递归实现
  • 复杂度
  • LeetCode:寻找最短路径

6、动态规划

  • LeetCode:求最长的一个上升子序列
  • 动态规划难点:递推公式
  • 动态规划解题分类(一):线性规划
  • LeetCode经典:不同路径
  • 动态规划解题分类(二):区间规划
  • LeetCode经典:最长的回文子序列
  • 动态规划解题分类(三):约束规划
  • LeetCode经典: 0-1背包问题

7、二分搜索与贪婪

8、高频真题

  • 无重复字符的最长子串
  • 求两个排序树组的中位数
  • 合并K个有序链表
  • 合并区间
  • 无重叠区间
  • 火星字典
  • 基本计算器
  • 正规表达式匹配
  • 柱状图中最大的矩形
  • 实现strStr()-KMP算法
  • 回文对
  • 至多包含K个不同字符的最长子串
  • 收集雨水II

9、字节Top50

    1. 两数之和
    1. 两数相加
    1. 无重复字符的最长子串
    1. 最长回文子串
    1. 接雨水
    1. 反转链表
    1. 寻找两个有序数组的中位数
    1. 盛最多水的容器
    1. 两数之和
    1. 合并两个有序链表
    1. 最大子序和
    1. LRU缓存机制
    1. K 个一组翻转链表
    1. 买卖股票的最佳时机
    1. 分发糖果
    1. 搜索旋转排序数组
    1. 有效的括号
    1. 合并K个排序链表
    1. 合并区间
    1. 整数反转
    1. 字典序的第K小数字
    1. 回文数
    1. 数组中的第K个最大元素
    1. 全排列
    1. 删除链表的倒数第N个节点
    1. 下一个排列
    1. 编辑距离
    1. 岛屿数量
    1. 复原IP地址
    1. 爬楼梯
    1. 正则表达式匹配
    1. 相交链表
    1. 二叉树的中序遍历
    1. 二叉树的层次遍历
    1. 二叉树的锯齿形层次遍历
    1. 对称二叉树
      
    1. 二叉树的右视图
    1. 零钱兑换
    1. 螺旋矩阵
    1. 字符串转换整数 (atoi)
    1. 括号生成
    1. 合并两个有序数组
      
    1. 重排链表
      
    1. 最长公共前缀
      
    1. 二叉树的最大深度
    1. 第二高的薪水
    1. 最长有效括号
    1. 两两交换链表中的节点
    1. 单词搜索
    1. 买卖股票的最佳时机 II

10、LeetCode top100

top100

CATALOG
  1. 1. 为什么学算法?
    1. 1.0.0.1. 为什么要学习算法?
  • 2. 主要算法
  • 3. 数据结构
    1. 3.1. 1、常见数据结构
      1. 3.1.1. 数组 链表 栈 队列 树
        1. 3.1.1.1. 链表
    2. 3.2. 2、高级数据结构
    3. 3.3. 3、排序
    4. 3.4. 4、递归与回溯
    5. 3.5. 5、深度优先于广度优先搜索
    6. 3.6. 6、动态规划
    7. 3.7. 7、二分搜索与贪婪
    8. 3.8. 8、高频真题
    9. 3.9. 9、字节Top50
    10. 3.10. 10、LeetCode top100