Skip to content

DongfeiJi/LeetCode

Repository files navigation

LeetCode/Cpp

本人刷题记录在此,包含题意理解与算法思路,包含在Cpp文件内部注释,后续会持续更新。
有不懂的可以联系ji648513181,同时也欢迎志同道合O的朋友一起合作更新。
已更新剑指Offer答案详解,刷题网站:牛客网。

LeetCode部分:

第一部分(链表):

  1. LeetCode 21.Merge Two Sorted Lists
  2. LeetCode 23.Merge k Sorted Lists(solve1)
  3. LeetCode 23.Merge k Sorted Lists(solve2)
  4. LeetCode 86.Partition List
  5. LeetCode 92.Reverse Linked List II
  6. LeetCode 138.Copy List with Random Pointer
  7. LeetCode 142.Linked List Cycle II(solve1)
  8. LeetCode 142.Linked List Cycle II(solve2)
  9. LeetCode 160.Intersection of Two LinkedLists(solve1)
  10. LeetCode 160.Intersection of Two LinkedLists(solve2)
  11. LeetCode 206.Reverse Linked List(递归)
  12. LeetCode 206.Reverse Linked List(迭代)

第二部分(栈、队列、堆):

  1. STL_stack
  2. STL_queue
  3. STL_priority_queue
  4. LeetCode 155.MinStack
  5. LeetCode 215.Kth Largest Element in an Array
  6. LeetCode 224.Basic Calculator
  7. LeetCode 225.Implement Stack using Queues
  8. LeetCode 232.Implement Queue using Stacks (adjust)
  9. LeetCode 232.Implement Queue using Stacks(push)
  10. LeetCode 295.Find Median from Data Stream

第三部分(贪心):

  1. LeetCode 45.Jump Game II
  2. LeetCode 55.Jump Game
  3. LeetCode 376.Wiggle Subsequence (暴力法)
  4. LeetCode 376.Wiggle Subsequence
  5. LeetCode 402.Remove K Digits
  6. LeetCode 452.Minimum Number of Arrows to Burst Balloons (二维数组)
  7. LeetCode 452.Minimum Number of Arrows to Burst Balloons(pair)
  8. LeetCode 455.Assign Cookies

第四部分(递归、分制、回溯):

  1. LeetCode 78.Subsets (回溯)
  2. LeetCode 78.Subsets (位运算)
  3. LeetCode 90.Subsets II(回溯)
  4. LeetCode 315.Count of Smaller Numbers After Self
  5. LeetCode 40.Combination Sum II(回溯+剪枝)
  6. LeetCode 22.Generate Parentheses (递归)
  7. LeetCode 51.N-Queens(回溯)

第五部分(二叉树、图):

  1. 自备_二叉树定义
  2. 自备_二叉树深度遍历
  3. 自备_二叉树层次遍历
  4. 自备_图的表示(临接矩阵,一般用于稠密图)
  5. 自备_图的表示(临接表,更为常用)
  6. 自备_图的深度优先遍历
  7. 自备_图的宽度优先遍历
  8. LeetCode 113.Path Sum II
  9. LeetCode 114.Flatten Binary Tree to Linked List(solve1)
  10. LeetCode 114.Flatten Binary Tree to Linked List(solve2)
  11. LeetCode 199.Binary Tree Right Side View
  12. LeetCode 207.Course Schedule(BFS版本)
  13. LeetCode 207.Course Schedule(DFS版本)
  14. LeetCode 236.Lowest Common Ancestor of a Binary Tree

第六部分(二分查找、二叉排序树、位运算的应用):

  1. 自备_将字符串拆分为整数
  2. 自备_二分查找(循环)
  3. 自备_二分查找(递归)
  4. 自备_二叉查找树的插入
  5. 自备_二叉查找树查找数值
  6. 自备_二叉查找树的插入+打印+收集节点复原
  7. LeetCode 33.Search in Rotated Sorted Array
  8. LeetCode 34.Search for a Range
  9. LeetCode 35.Search Insert Position
  10. LeetCode 315.Count of Smaller Numbers After Self
  11. LeetCode 449.Serialize and Deserialize BST

第七部分(哈希表与字符串):

  1. 自备_STL_map
  2. 自备_哈希函数
  3. 自备_字符哈希
  4. 自备_哈希表排序整数
  5. 自备_哈希表(拉链法)
  6. LeetCode 409.Longest Palindrome
  7. LeetCode 290.Word Pattern
  8. LeetCode 187.Repeated DNA Sequences(o10N)
  9. LeetCode 187.Repeated DNA Sequences(编码法oN)
  10. LeetCode 3.Longest Substring Without Repeating Characters
  11. LeetCode 49.Group Anagrams(排序strs作为key)
  12. LeetCode 49.Group Anagrams(0ne-hot作为key)
  13. LeetCode 76 判断s和t窗口是否ok
  14. LeetCode 76. Minimum Window Substring

第八部分(搜索):

  1. LeetCode 127.Word Ladder(建graph+BFS+map形式邻接表)
  2. LeetCode 200.Number of Islands(DFS+BFS+mark标记)
  3. LeetCode 473.Matchsticks to Square(DFS+回溯+剪枝优化)

第九部分(动态规划):

  1. LeetCode 53.Maximum Subarray(dp中求最优)
  2. LeetCode 70.Climbing Stairs(回溯)(复杂度较高)
  3. LeetCode 70.Climbing Stairs(最原始dp斐波那契数列)
  4. LeetCode 120.Triangle(二维dp数组+优化边界思想+正反思考问题)
  5. LeetCode 198.House Robber(dp+注意下标越界问题)
  6. LeetCode 322.Coin Change(dp状态转移设计+离散状态转移)

剑指Offer部分:对66道题目进行了粗略的划分,整理如下:

链表(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(六十四):滑动窗口的最大值

十大排序算法部分:包括优化以及经典问题,整理如下:

  1. 排序基本知识
  2. 冒泡排序(外层优化+外+内优化)
  3. 快速排序(经典+随机)
  4. 快速排序版本2
  5. 快速排序小和问题
  6. 插入排序
  7. 希尔排序
  8. 选择排序
  9. 堆排序
  10. 归并排序(二路+多路)
  11. 归并排序版本2
  12. 计数排序
  13. 桶排序
  14. 桶排数组最大值问题
  15. 基数排序