例题来源于课本:算法笔记+计算机算法设计与分析
常见算法类型
- 一、模拟:
- 二、双指针:
- 三、打表/散列:
- 四、排序:
- 五、二分:
- 六、递归:
- 七、回溯/DFS(递归):
- 八、分治(递归):
- 九、贪心:
- 十、动态规划/递推:
一、模拟:
- 图形输出:画X
- 日期处理:判断周几
- 进制转换:十进制转K进制
- 数学:最大公约数与最小公倍数、大整数四则运算
二、双指针:
- 归并排序
- 快速排序
- 2sum双指针
三、打表/散列:
- 集合求差*
- 集合求交
- 集合求并
- 012对*
- 中间数*
- 第K大
四、排序:
- 考生排序*
- 字符串升序排序
- 最长矩形序列
五、二分:
- 整数二分:
- 寻找第一个1
- 寻找第一个偶数
- 单峰序列*
- 旋转数组*
- 浮点数二分
- 方程求根*
- 木棒切割问题
- 快速幂*
六、递归:
- 汉诺塔*
- 自然数分解之最大积*
- 自然数分解之方案数*
七、回溯/DFS(递归):
- 数塔*
- 游园会(子集树)
- 迷宫问题*
- 矩阵最大权值问题
- 马的Hamilton周游路线问题
- 全排列*
- 子集* (防重复每次使用string s[10000]记录)
- 组合(等价于k个的子集)
- 标准二维表问题(排列树+判断)
- 批处理作业调度问题(排列树+判断)
- 符号三角形问题(排列数+判断)
- N皇后问题(排列树+判断)*
- 0-1背包问题(子集树+判断)
- 图的m着色问题(排列树+判断)
- 旅行售货员问题(排列树+判断)
- 圆排列问题(排列树+判断)
- 连续邮资问题(子集树+判断)
八、分治(递归):
- 棋盘覆盖问题*
- 数字螺旋矩阵*
- 集合划分问题*
- 整数因子分解*
九、贪心:
- 区间不相交问题*
- 区间选点问题
- 活动安排问题、会场安排问题(先排序)
- 多处最优服务次序问题
- 虚拟汽车加油问题
- 拼接最小数
- 收集样本问题
十、动态规划/递推:
- 线性DP
- 最长公共子序列*
- 最长不下降子序列*
- 最大连续子序列和(一维)、最大长方体问题(三维)*
- 最小m段和(难)
- 自然数分解之最大积*
- 区间DP
- 最长回文子串 *
- 矩阵连乘*
- 石子合并*
- 最优合并
- 凸多边形最优三角剖分
- 多边形游戏、环形石子合并*
- 租用游艇问题
- 背包DP
- 01背包*
- 完全背包
- 其他DP
- 最小消耗能量*
- 最小涂色成本*
- 编辑距离、字符串比较问题*