本人刷题记录在此,包含题意理解与算法思路,包含在Cpp文件内部注释,后续会持续更新。
有不懂的可以联系ji648513181,同时也欢迎志同道合O的朋友一起合作更新。
已更新剑指Offer答案详解,刷题网站:牛客网。
第一部分(链表):
- LeetCode 21.Merge Two Sorted Lists
- LeetCode 23.Merge k Sorted Lists(solve1)
- LeetCode 23.Merge k Sorted Lists(solve2)
- LeetCode 86.Partition List
- LeetCode 92.Reverse Linked List II
- LeetCode 138.Copy List with Random Pointer
- LeetCode 142.Linked List Cycle II(solve1)
- LeetCode 142.Linked List Cycle II(solve2)
- LeetCode 160.Intersection of Two LinkedLists(solve1)
- LeetCode 160.Intersection of Two LinkedLists(solve2)
- LeetCode 206.Reverse Linked List(递归)
- LeetCode 206.Reverse Linked List(迭代)
第二部分(栈、队列、堆):
- STL_stack
- STL_queue
- STL_priority_queue
- LeetCode 155.MinStack
- LeetCode 215.Kth Largest Element in an Array
- LeetCode 224.Basic Calculator
- LeetCode 225.Implement Stack using Queues
- LeetCode 232.Implement Queue using Stacks (adjust)
- LeetCode 232.Implement Queue using Stacks(push)
- LeetCode 295.Find Median from Data Stream
第三部分(贪心):
- LeetCode 45.Jump Game II
- LeetCode 55.Jump Game
- LeetCode 376.Wiggle Subsequence (暴力法)
- LeetCode 376.Wiggle Subsequence
- LeetCode 402.Remove K Digits
- LeetCode 452.Minimum Number of Arrows to Burst Balloons (二维数组)
- LeetCode 452.Minimum Number of Arrows to Burst Balloons(pair)
- LeetCode 455.Assign Cookies
第四部分(递归、分制、回溯):
- LeetCode 78.Subsets (回溯)
- LeetCode 78.Subsets (位运算)
- LeetCode 90.Subsets II(回溯)
- LeetCode 315.Count of Smaller Numbers After Self
- LeetCode 40.Combination Sum II(回溯+剪枝)
- LeetCode 22.Generate Parentheses (递归)
- LeetCode 51.N-Queens(回溯)
第五部分(二叉树、图):
- 自备_二叉树定义
- 自备_二叉树深度遍历
- 自备_二叉树层次遍历
- 自备_图的表示(临接矩阵,一般用于稠密图)
- 自备_图的表示(临接表,更为常用)
- 自备_图的深度优先遍历
- 自备_图的宽度优先遍历
- LeetCode 113.Path Sum II
- LeetCode 114.Flatten Binary Tree to Linked List(solve1)
- LeetCode 114.Flatten Binary Tree to Linked List(solve2)
- LeetCode 199.Binary Tree Right Side View
- LeetCode 207.Course Schedule(BFS版本)
- LeetCode 207.Course Schedule(DFS版本)
- LeetCode 236.Lowest Common Ancestor of a Binary Tree
第六部分(二分查找、二叉排序树、位运算的应用):
- 自备_将字符串拆分为整数
- 自备_二分查找(循环)
- 自备_二分查找(递归)
- 自备_二叉查找树的插入
- 自备_二叉查找树查找数值
- 自备_二叉查找树的插入+打印+收集节点复原
- LeetCode 33.Search in Rotated Sorted Array
- LeetCode 34.Search for a Range
- LeetCode 35.Search Insert Position
- LeetCode 315.Count of Smaller Numbers After Self
- LeetCode 449.Serialize and Deserialize BST
第七部分(哈希表与字符串):
- 自备_STL_map
- 自备_哈希函数
- 自备_字符哈希
- 自备_哈希表排序整数
- 自备_哈希表(拉链法)
- LeetCode 409.Longest Palindrome
- LeetCode 290.Word Pattern
- LeetCode 187.Repeated DNA Sequences(o10N)
- LeetCode 187.Repeated DNA Sequences(编码法oN)
- LeetCode 3.Longest Substring Without Repeating Characters
- LeetCode 49.Group Anagrams(排序strs作为key)
- LeetCode 49.Group Anagrams(0ne-hot作为key)
- LeetCode 76 判断s和t窗口是否ok
- LeetCode 76. Minimum Window Substring
第八部分(搜索):
- LeetCode 127.Word Ladder(建graph+BFS+map形式邻接表)
- LeetCode 200.Number of Islands(DFS+BFS+mark标记)
- LeetCode 473.Matchsticks to Square(DFS+回溯+剪枝优化)
第九部分(动态规划):
- LeetCode 53.Maximum Subarray(dp中求最优)
- LeetCode 70.Climbing Stairs(回溯)(复杂度较高)
- LeetCode 70.Climbing Stairs(最原始dp斐波那契数列)
- LeetCode 120.Triangle(二维dp数组+优化边界思想+正反思考问题)
- LeetCode 198.House Robber(dp+注意下标越界问题)
- LeetCode 322.Coin Change(dp状态转移设计+离散状态转移)
链表(8道):
剑指Offer(三):从尾到头打印链表
剑指Offer(十四):链表中倒数第k个结点
剑指Offer(十五):反转链表
剑指Offer(十六):合并两个排序的链表
剑指Offer(二十五):复杂链表的复制
剑指Offer(三十六):两个链表的第一个公共结点
剑指Offer(五十五):链表中环的入口结点
剑指Offer(五十六):删除链表中重复的结点
二叉树(12道):
剑指Offer(四):重建二叉树
剑指Offer(十七):树的子结构
剑指Offer(十八):二叉树的镜像
剑指Offer(二十二):从上往下打印二叉树
剑指Offer(二十四):二叉树中和为某一值的路径
剑指Offer(三十八):二叉树的深度
剑指Offer(三十九):平衡二叉树
剑指Offer(五十七):二叉树的下一个结点
剑指Offer(五十八):对称的二叉树
剑指Offer(五十九):按之字顺序打印二叉树
剑指Offer(六十):把二叉树打印成多行
剑指Offer(六十一):序列化二叉树
二叉搜索树(3道):
剑指Offer(二十三):二叉搜索树的后序遍历序列
剑指Offer(二十六):二叉搜索树与双向链表
剑指Offer(六十二):二叉搜索树的第k个结点
数组(11道):
剑指Offer(一):二维数组中的查找
剑指Offer(六):旋转数组的最小数字
剑指Offer(十三):调整数组顺序使奇数位于偶数前面
剑指Offer(二十八):数组中出现次数超过一半的数字
剑指Offer(三十):连续子数组的最大和
剑指Offer(三十二):把数组排成最小的数
剑指Offer(三十五):数组中的逆序对
剑指Offer(三十七):数字在排序数组中出现的次数
剑指Offer(四十):数组中只出现一次的数字
剑指Offer(五十):数组中重复的数字
剑指Offer(五十一):构建乘积数组
字符串(8道):
剑指Offer(二):替换空格
剑指Offer(二十七):字符串的排列
剑指Offer(三十四):第一个只出现一次的字符
剑指Offer(四十三):左旋转字符串
剑指Offer(四十四):翻转单词顺序序列
剑指Offer(四十九):把字符串转换成整数
剑指Offer(五十二):正则表达式匹配
剑指Offer(五十三):表示数值的字符串
栈(3道):
剑指Offer(五):用两个栈实现队列
剑指Offer(二十):包含min函数的栈
剑指Offer(二十一):栈的压入、弹出序列
递归(4道):
剑指Offer(七):裴波那契数列
剑指Offer(八):跳台阶
剑指Offer(九):变态跳台阶
剑指Offer(十):矩形覆盖
回溯法(2道):
剑指Offer(六十五):矩阵中的路径
剑指Offer(六十六):机器人的运动范围
其他(15道):
剑指Offer(十一):二进制中1的个数
剑指Offer(十二):数值的整数次方
剑指Offer(十九):顺时针打印矩阵
剑指Offer(二十九):最小的K个数
剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)
剑指Offer(三十三):丑数
剑指Offer(四十一):和为S的连续正数序列
剑指Offer(四十二):和为S的两个数字
剑指Offer(四十五):扑克牌顺子
剑指Offer(四十六):孩子们的游戏(圆圈中最后剩下的数)
剑指Offer(四十七):求1+2+3+…+n
剑指Offer(四十八):不用加减乘除的加法
剑指Offer(五十四):字符流中第一个不重复的字符
剑指Offer(六十三):数据流中的中位数
剑指Offer(六十四):滑动窗口的最大值
- 排序基本知识
- 冒泡排序(外层优化+外+内优化)
- 快速排序(经典+随机)
- 快速排序版本2
- 快速排序小和问题
- 插入排序
- 希尔排序
- 选择排序
- 堆排序
- 归并排序(二路+多路)
- 归并排序版本2
- 计数排序
- 桶排序
- 桶排数组最大值问题
- 基数排序