Skip to content

letgoat/my_algorithm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

算法题总结

这是一个分模块的算法题总结项目,包含了我对常见算法题目的理解和实现。

📁 项目结构

my_algorithm/
├── greedy.cpp          # 贪心算法相关题目
├── backtracking.cpp    # 回溯算法相关题目
└── README.md          # 项目说明文档

🧮 算法模块

1. 贪心算法 (greedy.cpp)

核心思想: 在每一步选择中都采取当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法策略。

包含题目:

  • 435. 无重叠区间 - 经典区间调度问题
  • 763. 划分字母区间 - 字符串分割问题
  • 56. 合并区间 - 区间合并问题

关键技巧:

  • 区间排序(按开始时间或结束时间)
  • 贪心选择策略
  • 空间优化(使用 emplace_backreserve

2. 回溯算法 (backtracking.cpp)

核心思想: 通过深度优先搜索,在搜索过程中构建解,当发现当前路径不能得到有效解时,回溯到上一步,尝试其他选择。

包含题目:

  • 77. 组合 - 基础组合问题
  • 216. 组合总和 III - 带约束的组合问题
  • 17. 电话号码的字母组合 - 字符串组合问题

关键技巧:

  • 剪枝优化(减少无效递归)
  • 状态管理(局部变量 vs 成员变量)
  • 空间预分配优化

🚀 代码特点

性能优化

  • 剪枝策略: 在回溯算法中减少无效分支
  • 空间预分配: 使用 reserve() 避免动态扩容
  • 引用传递: 减少不必要的拷贝操作
  • 局部变量: 避免状态污染,提高线程安全性

代码风格

  • 清晰的注释和文档
  • 统一的命名规范
  • 模块化的代码结构
  • 可读性强的实现

📚 学习笔记

贪心算法要点

  1. 适用场景: 最优化问题,每一步都有最优选择
  2. 证明方法: 通常需要证明贪心选择性质
  3. 常见问题: 区间调度、分配问题、排序问题

回溯算法要点

  1. 三部曲: 参数设计 → 终止条件 → 遍历过程
  2. 剪枝技巧: 提前返回、约束条件、最优性剪枝
  3. 状态管理: 选择、处理、递归、回溯

🔧 使用说明

编译运行

# 编译 C++ 文件
g++ -std=c++11 greedy.cpp -o greedy
g++ -std=c++11 backtracking.cpp -o backtracking

# 运行程序
./greedy
./backtracking

代码结构

每个算法模块都包含:

  • 问题描述和思路
  • 完整的代码实现
  • 优化版本对比
  • 性能分析

📈 持续更新

这个项目会持续添加新的算法模块和题目,包括但不限于:

  • 动态规划
  • 图论算法
  • 字符串算法
  • 数据结构应用

🤝 贡献

欢迎提出建议和改进意见!


这是一个用于学习和总结算法题目的个人项目,旨在提高算法思维和编程能力。

About

this is a reposity that contain all my solved algorithm problem

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages