主要使用golang语言讲解和实现算法,包括数据结构、leetcode算法题等。
Leetcode部分主要参考了代码随想录, 然后自己做了相关的笔记和实现,便于分享和后期温习。
| 题目 | 原题 | 难度 | 问题和讲解 | 源码 | 关键词 | 已完成 |
|---|---|---|---|---|---|---|
| 704. 二分查找 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 二分法 | ☑ |
| 27. 移除元素 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 双指针法 | ☑ |
| 977. 有序数组的平方 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 双指针法 | ☑ |
| 209. 长度最小的子数组 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 滑动窗口 | ☑ |
| 59. 螺旋矩阵 II | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 考验代码掌控能力和边界掌控 | ☑ |
| 题目 | 原题 | 难度 | 问题和讲解 | 源码 | 关键词 | 已完成 |
|---|---|---|---|---|---|---|
| 203. 移除链表元素 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 虚拟头节点 | ☑ |
| 707. 设计链表 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 链表基本操作 | ☑ |
| 206. 反转链表 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 24. 两两交换链表中的节点 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | ☑ | |
| 19. 删除链表的倒数第 N 个结点 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 双指针法 | ☑ |
| 面试题 02.07. 链表相交 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 142. 环形链表 II | leecode原题链接 | 中等 | 问题和讲解 | 源码 | ☑ |
| 题目 | 原题 | 难度 | 问题和讲解 | 源码 | 关键词 | 已完成 |
|---|---|---|---|---|---|---|
| 242. 有效的字母异位词 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 349. 两个数组的交集 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 202. 快乐数 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 1. 两数之和 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 454. 四数相加 II | leecode原题链接 | 中等 | 问题和讲解 | 源码 | ☑ | |
| 383. 赎金信 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 15. 三数之和 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | ☑ | |
| 18. 四数之和 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | ☑ |
| 题目 | 原题 | 难度 | 问题和讲解 | 源码 | 关键词 | 已完成 |
|---|---|---|---|---|---|---|
| 344. 反转字符串 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 541. 反转字符串 II | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 剑指 Offer 05. 替换空格 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | ☑ | |
| 151. 颠倒字符串中的单词 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | ☑ | |
| 58 - II. 左旋转字符串 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 花式反转 | ☑ |
| 28. 实现 strStr | leecode原题链接 | 简单 | 问题和讲解 | 源码 | KMP算法 | ☑ |
| 459. 重复的子字符串 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | KMP算法 | ☑ |
| 题目 | 原题 | 难度 | 问题和讲解 | 源码 | 关键词 | 已完成 |
|---|---|---|---|---|---|---|
| 232. 用栈实现队列 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 输入、输出栈 | ☑ |
| 225. 用队列实现栈 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 队列的基本使用 | ☑ |
| 20. 有效的括号 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 使用栈解决的经典问题 | ☑ |
| 1047. 删除字符串中的所有相邻重复项 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 匹配问题也使用栈解决 | ☑ |
| 150. 逆波兰表达式求值 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 计算机运算思考方式,使用栈解决的经典问题 | ☑ |
| 239. 滑动窗口最大值 | leecode原题链接 | 困难 | 问题和讲解 | 源码 | 单调队列的经典题目 | ☑ |
| 347. 前 K 个高频元素 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 优先级队列 | ☑ |
| 题目 | 原题 | 难度 | 问题和讲解 | 源码 | 关键词 | 已完成 |
|---|---|---|---|---|---|---|
| 144. 二叉树的前序遍历 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 前序遍历(递归法+迭代法(借助栈)) | ☑ |
| 145. 二叉树的后序遍历 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 后序遍历(递归法+迭代法(借助栈)) | ☑ |
| 94. 二叉树的中序遍历 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 后序遍历(递归法+迭代法(借助栈)) | ☑ |
| 102. 二叉树的层序遍历 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 层次遍历(借助队列) | ☑ |
| 226. 翻转二叉树 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 可以是层次遍历的的变种实现 | ☑ |
| 101. 对称二叉树 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 递归和迭代 | ☑ |
| 104. 二叉树的最大深度 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 层序遍历的用法 | ☑ |
| 111. 二叉树的最小深度 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 层序遍历的用法 | ☑ |
| 222. 完全二叉树的节点个数 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 层次遍历 | ☑ |
| 110. 平衡二叉树 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 递归 | ☑ |
| 257. 二叉树的所有路径 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 递归和回溯 | ☑ |
| 404. 左叶子之和 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 前序遍历变种 | ☑ |
| 513. 找树左下角的值 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 层次遍历的应用 | ☑ |
| 112. 路径总和 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 跟257这题思路类似 | ☑ |
| 106. 从中序与后序遍历序列构造二叉树 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 典型的从遍历反向构造二叉树 | ☑ |
| 654. 最大二叉树 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 递归 | ☑ |
| 617. 合并二叉树 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 两棵子树同时前序遍历 | ☑ |
| 700. 二叉搜索树中的搜索 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 二叉搜索树特性 | ☑ |
| 98. 验证二叉搜索树 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 二叉搜索树特性 | ☑ |
| 530. 二叉搜索树的最小绝对差 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 二叉搜索树特性和中序遍历的结合(形成有序数组) | ☑ |
| 501. 二叉搜索树中的众数 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 二叉搜索树特性和中序遍历的结合(进阶: 一次遍历中解决) | ☑ |
| 236. 二叉树的最近公共祖先 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 递归 | ☑ |
| 701. 二叉搜索树中的插入操作 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 二叉树特性 | ☑ |
| 450. 删除二叉搜索树中的节点 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 二叉搜索树特性利用 | ☑ |
| 669. 修剪二叉搜索树 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 二叉搜索树特性利用 | ☑ |
| 108. 将有序数组转换为二叉搜索树 | leecode原题链接 | 简单 | 问题和讲解 | 源码 | 结合二分法的思想使用 | ☑ |
| 538. 把二叉搜索树转换为累加树 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 二叉树的反中序遍历 | ☑ |
| 题目 | 原题 | 难度 | 问题和讲解 | 源码 | 关键词 | 已完成 |
|---|---|---|---|---|---|---|
| 77. 组合 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 组合类回溯算法 | ☑ |
| 216. 组合总和 III | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 组合类回溯算法 | ☑ |
| 17. 电话号码的字母组合 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 组合类回溯算法 | ☑ |
| 39. 组合总和 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 组合类回溯算法 | ☑ |
| 40. 组合总和 II | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 组合类回溯算法(去重) | ☑ |
| 131. 分割回文串 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 分割问题 | ☑ |
| 93. 复原 IP 地址 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 分割问题 | ☑ |
| 78. 子集 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 子集问题 | ☑ |
| 90. 子集 II | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 子集问题 | ☑ |
| 491. 递增子序列 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 像子集问题 | ☑ |
| 46. 全排列 | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 像子集问题 | ☑ |
| 47. 全排列 II | leecode原题链接 | 中等 | 问题和讲解 | 源码 | 像子集问题(去重) | ☑ |
| 332. 重新安排行程 | leecode原题链接 | 困难 | 问题和讲解 | 源码 | ☑ | |
| 51. N 皇后 | leecode原题链接 | 困难 | 问题和讲解 | 源码 | ☑ | |
| 37. 解数独 | leecode原题链接 | 困难 | 问题和讲解 | 源码 | ☑ |