算法练习_C/C++

来源:互联网 发布:java常见异常类型 编辑:程序博客网 时间:2024/05/21 15:00

算法练习

github地址:https://github.com/lawlite19/AlgorithmExercises

一、 排序算法

1. 交换排序

  • 冒泡排序
    • 冒泡排序改进1
    • 冒泡排序改进2
    • 冒泡排序改进3
  • 快速排序

2. 插入排序

  • 直接插入排序
    • 直接插入排序递归版
  • 希尔排序

3. 选择排序

  • 简单选择排序
    • 二元选择排序
  • 堆排序

4. 归并排序

  • 二路归并排序递归版
  • 二路归并排序非递归版

二、 字符串

1. 字符串旋转

  • 字符串旋转_暴力法
  • 字符串旋转_三步翻转法

2. 字符串包含

  • 字符串包含判断_遍历
  • 字符串包含判断_排序
  • 字符串包含判断_素数乘积
  • 字符串包含判断_哈希 ★★★

3. 回文

  • 回文判断

4. 最长回文子串长度

  • 最长回文子串长度_一般解法
  • 最长回文子串长度_Manacher ★★★
    • 算法说明

5. 全排列

  • 全排列_递归
  • 全排列_字典序排列
  • 字典序全排列

6. 变形词

  • 变形词判断

7. 字符串中数字串之和

  • 字符串中数字串之和 ★

8. 去除字符串中连续K个0串

  • 去除字符串中连续K个0串

9. 整数字符串转整数值

  • 整数字符串转整数值 ★★

10. 字符串匹配问题

  • 字符串匹配_KMP ★★★★★
    • 算法说明

三、 数组和矩阵

1. 二维数组查找

  • 二维数组查找

2. 矩阵相关操作

  • 转圈打印矩阵

3. 最小的k个元素

  • 最小的k个元素_堆
  • 最小的k个元素_BFPRT ★★★★★
    • 算法说明

4.中间数

  • 中间数_辅助数组 ★

5.非负数组和为K的最长子数组

  • 非负数组和为K的最长子数组_双指针 ★★★

8.次数出现大于N/K的数

  • 次数出现大于N/2的数 ★
  • 次数出现大于N/K的数 ★★★

9.逆序对

  • 逆序对数_分治归并★

10.两个有序数组的中位数

  • 两个有序数组的中位数_分治★★★★
    • 算法说明

四、 递归和动态规划

1. 斐波那契问题

  • 矩形覆盖_递归
  • 矩形覆盖_dp ★
  • 矩阵覆盖_矩阵转化_class实现 ★★★
  • 矩阵覆盖_矩阵转化_vector实现 ★★★
    • 算法说明
  • 爬楼梯_递归
  • 爬楼梯_dp ★

  • 变态跳台阶_递归

  • 变态跳台阶_直接计算 ★

2. 最大子数组和相关问题

  • 最大子数组和_dp ★
  • 两个不相容子数组最大和_辅助数组 ★★

3. 最长递增子序列相关问题

  • 最长递增子序列_一般dp
  • 最长递增子序列_dp优化 ★★
  • 摞数组问题(俄国沙皇问题)_纯代码实现 ★★★★
  • 摞数组问题(俄国沙皇问题)_借助stl ★★★★

五、 栈和队列

1. getMin功能栈

  • getMin功能栈_方案1
  • getMin功能栈_方案2

2. 两个栈实现队列功能

  • 两个栈实现队列

七、二叉树

1. 遍历

  • 先、中、后序遍历_递归
  • 先、中、后序遍历_非递归 ★★

八、位运算

  • 出现奇数次的数
1 0
原创粉丝点击