Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

longpi1/algorithm-pattern

Open more actions menu

Repository files navigation

基于开源项目添加个人的相关练习代码:https://github.com/greyireland/algorithm-pattern

刷题不应该只是为了面试,也是提升个人能力和掌握一门语言的高效方法

目录结构

  • algorithm-pattern/
    • algorithm_list_golang/: golang编写的相关leetcode刷题记录
      • array/ 数组相关
      • stack&queue/ 栈和队列
      • string/ 字符串
      • tree/ 二叉树
      • linkedList/ 链表
      • .../
    • base_golang/: golang相关数据结构的基础实现
      • array/ 数组相关
      • stack&queue/ 栈和队列
      • string/ 字符串
      • tree/ 二叉树
      • linkedList/ 链表
      • .../
    • algorithm_list_php/: php编写的相关leetcode刷题记录(todo)
      • array/ 数组相关
      • stack&queue/ 栈和队列
      • string/ 字符串
      • tree/ 二叉树
      • linkedList/ 链表
      • .../
    • base_php/: php相关数据结构的基础实现
      • array/ 数组相关
      • stack&queue/ 栈和队列
      • string/ 字符串
      • tree/ 二叉树
      • linkedList/ 链表
      • .../
    • data_structure/: 基础结构
      • binary_op : 常见二进制操作
      • binary_tree : 二叉树
      • linked_list : 链表
      • stack_queue : 栈和队列
    • images/: 图像
    • docs/
    • .../
      • README.md : 项目文档
    • LICENSE : 项目许可证

重要技巧:画图+调式

数组:

主要思路为,排序,双指针,回溯

链表:

主要思路双指针,指针的转换,递归(递归最主要找边界条件(也就是终止条件)与非边界条件,得到最小子问题的结果)

回溯:

模板

result = []
func backtrack(选择列表,路径):
    if 满足结束条件:
        result.add(路径)
        return
    for 选择 in 选择列表:
        做选择
        backtrack(选择列表,路径)
        撤销选择

递归技巧

递归(递归最主要找边界条件(也就是终止条件) 举例子:二叉树最大深度

  1. 如何思考二叉树相关问题?

    • 不要一开始就陷入细节,而是思考整棵树与其左右子树的关系。
  2. 为什么需要使用递归?

    • 子问题和原问题是相似的,他们执行的代码也是相同的(类比循环),但是子问题需要把计算结果返回给上一级,这更适合用递归实现。
  3. 为什么这样写就一定能算出正确答案?

    • 由于子问题的规模比原问题小,不断“递”下去,总会有个尽头,即递归的边界条件 ( base case ),直接返回它的答案“归”;
    • 类似于数学归纳法(多米诺骨牌),n=1时类似边界条件;n=m时类似往后任意一个节点
  4. 计算机是怎么执行递归的?

    • 当程序执行“递”动作时,计算机使用栈保存这个发出“递”动作的对象,程序不断“递”,计算机不断压栈,直到边界时,程序发生“归”动作,正好将执行的答案“归”给栈顶元素,随后程序不断“归”,计算机不断出栈,直到返回原问题的答案,栈空。
  5. 另一种递归思路

    • 维护全局变量,使用二叉树遍历函数,不断更新全局变量最大值。

    递归相关讲解视频:https://www.bilibili.com/video/BV1UD4y1Y769/?vd_source=34718180774b041b23050c8689cdbaf2

About

算法训练集合(golang&php)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.