主要使用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原题链接 | 困难 | 问题和讲解 | 源码 | ☑ |