2021年LeetCode算法实践总结:从队列到动态规划的全记录

需积分: 10 1 下载量 102 浏览量 更新于2024-10-30 收藏 45KB ZIP 举报
资源摘要信息:"LeetCode题库实践总结" 知识点一:数据结构基础 - 队列和堆栈:队列遵循先进先出原则,常用于广度优先搜索;堆栈遵循后进先出原则,常用于深度优先搜索。 - 广度优先搜索(BFS):遍历图结构时,逐层扩展节点,通常用队列实现。 - 深度优先搜索(DFS):遍历图结构时,尽可能深地搜索每个分支,一般使用递归实现。 知识点二:排序算法 - 归并排序:一种分而治之的排序算法,时间复杂度为O(n*log(n)),将数组分成两半,递归排序,然后合并。 - 动态规划:解决复杂问题时,通过将问题分解为重叠的子问题,并存储子问题解以避免重复计算的策略。 知识点三:动态规划实战 - 最长递增子序列:利用动态规划找出数组中的最长递增子序列,结合二进制搜索可以优化到O(n*log(n))时间复杂度。 - 最大子数组和:动态规划可以用来解决寻找给定整数数组中的最大子数组和问题(如Kadane算法)。 知识点四:二分查找技巧 - 二分查找:在有序数组中查找特定元素的高效算法,时间复杂度为O(log(n))。 - 在旋转排序数组中搜索:是对标准二分查找算法的扩展,需要处理数组旋转带来的特殊排序问题。 - 搜索二维矩阵:将二维矩阵拉伸为一维有序数组后,使用二分查找解决问题。 知识点五:编程技巧 - 删除所有相邻的重复项:通过使用栈的数据结构可以有效地删除字符串中相邻的重复字符。 - 有效字谜:利用哈希表记录字符串中每个字符出现的次数,然后比较两个字符串中字符出现次数的分布。 知识点六:数学问题处理 - 将两个整数相除:涉及整数除法和余数的计算。 - 细绳问题:可能涉及数学分析和求解方法,但具体问题未给出。 知识点七:二叉树操作 - 二叉树的最大深度:通过递归遍历二叉树,分别计算左右子树的最大深度,取最大值加一。 - 对称树:检查一棵二叉树是否是镜像对称的。 - 转置矩阵:通常指的是将矩阵的行列互换,得到转置矩阵。 知识点八:数组变换 - 排序数组的平方:先对数组进行排序,再对平方后的数组进行排序,或者一次性计算平方并排序。 - 两个指针和二分搜索:结合两个指针遍历数组和二分搜索,可以解决特定条件下的数组问题。 - 最小尺寸子阵列总和:利用滑动窗口方法和前缀和技巧,找出给定数组中连续子数组和的最小值。 知识点九:矩阵操作 - 设置矩阵零:遍历矩阵,利用额外的存储结构记录每行每列是否需要置零。 - 三和问题:通常指的是找出数组中所有三个元素之和等于特定值的组合。 - 最近通话次数:与数学问题结合,可能涉及到组合数学的计算。 知识点十:算法策略 - 贪婪算法:在每一步选择中都采取在当前状态下最好或最优的选择,以希望导致结果是全局最好或最优的算法。 - 加油站:可能指的是贪心策略在选择加油站以最大化行驶距离的应用问题。 在"LeetCode_2021-main"压缩包子文件中,我们可以预期包含以上知识点相关的编程题目和解题代码,通过这些题目和解题过程的实践,可以在数据结构、算法设计和问题解决能力上有显著的提高。这些知识点是算法和编程中非常重要的基础,能够帮助开发者在解决实际问题时选择合适的策略和方法。