LeetCode刷题技巧分享:子序列、股票与动态规划

需积分: 9 0 下载量 44 浏览量 更新于2024-11-04 收藏 3.7MB ZIP 举报
资源摘要信息:"leetcode1004-leetcode:日常刷题记录:full_moon_face:" 知识点一:LeetCode平台 LeetCode是一个广泛使用的在线编程平台,提供各种编程题目,特别是算法和数据结构题目,供编程爱好者练习和提高编程能力。该平台经常被用于准备技术面试,因为它提供了与许多大型科技公司面试相关的编程问题类型。 知识点二:动态规划 动态规划(Dynamic Programming,DP)是一种算法思想,它通过将复杂问题分解为简单子问题,并在每个子问题中存储解决方案,以避免重复计算,从而提高效率。动态规划通常用于解决具有重叠子问题和最优子结构的问题,例如最大子序列和、背包问题等。 知识点三:子序列类型问题 子序列是指从给定序列中删除一些或不删除元素,但不改变剩余元素的顺序得到的新序列。子序列类型问题通常涉及判断某个序列是否是另一个序列的子序列,或者寻找两个序列的最长公共子序列(Longest Common Subsequence, LCS)。 知识点四:股票问题 在LeetCode中,股票问题通常指一系列与股票买卖有关的算法问题。这类问题经常考察动态规划的技巧,比如计算在给定价格数组的情况下能获得的最大利润。 知识点五:二分法 二分查找是一种在有序数组中查找特定元素的高效算法。该算法通过比较数组中间的元素与目标值,决定是向左半部分查找还是向右半部分查找,从而将搜索范围缩小一半。二分查找的时间复杂度为O(log n),非常适合处理大数据集。 知识点六:堆 堆(Heap)是一种特殊的数据结构,通常实现为完全二叉树,并且满足堆属性:任何一个父节点的值都必须大于或等于(在最大堆中)或小于或等于(在最小堆中)其子节点的值。堆常用于实现优先队列,而且是堆排序算法的基础。 知识点七:链表 链表是一种常见的基础数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。链表的优点是动态大小且高效的插入和删除操作。链表分为单向链表、双向链表和循环链表等多种类型。 知识点八:深度优先搜索(DFS) 深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。该方法从根节点开始,尽可能沿着树的分支进行搜索,直到叶子节点,然后回溯并尝试另一个分支。DFS可以用来解决各种复杂问题,包括路径查找、拓扑排序等。 知识点九:前缀和 前缀和是一种预处理技术,通过计算数组(或序列)的累积和来优化查询操作。如果有一个数组的前缀和数组预先计算好了,那么可以在O(1)的时间内回答关于原数组区间和的问题。 知识点十:滑动窗口 滑动窗口是一种常用的解决区间类问题的技术。通过维护一个不断移动的窗口,并在移动过程中更新窗口内的数据或计算结果,滑动窗口可以在O(n)的时间复杂度内解决一些特定的问题,例如寻找无重复字符的最长子串、最小覆盖子串等。