leetcode双指针经典练习题
有序数组去重、合并两个有序数组和有序数组的平方,是这组三题练习的内容。几道题都配有 Python 实现,讨论集中在指针含义、有效区间、原地修改和边界条件的区别上。去重一节还留下了两种写法的对照:作者觉得原先的计数方案有些绕,便接着写了另一种版本,并逐一说明实现时容易混淆的地方。
有序数组去重、合并两个有序数组和有序数组的平方,是这组三题练习的内容。几道题都配有 Python 实现,讨论集中在指针含义、有效区间、原地修改和边界条件的区别上。去重一节还留下了两种写法的对照:作者觉得原先的计数方案有些绕,便接着写了另一种版本,并逐一说明实现时容易混淆的地方。
这道最长连续子数组题,与滑动窗口最大值那篇笔记有直接联系。两篇都涉及窗口和单调队列,但这里的限制条件、窗口长度和收缩判断有所不同。文章沿着这组对照展开,说明为何需要同时关注区间的两种最值,并在 Python 实现之后补充条件判断与边界处理的差别。
排序规则是这份“最大数”题解的重点。笔记从具体例子谈起,比较数值大小、字典序与题目所需顺序之间的差别,再转向 Python 自定义排序的实现。比较函数与排序接口怎样衔接、不同返回结果的含义,以及全零输入的处理,都有代码之外的说明。
单调队列在这道题里承担什么作用,哪些元素可以离开队列,又有哪些需要继续保留,是这份笔记展开讨论的几个问题。内容以定长滑动窗口为背景,结合 Python 代码说明候选元素与过期位置的处理,并区分索引和数值的用途。篇幅主要留给这些实现选择背后的理由,以及窗口移动时容易遗漏的边界。
寻找数组中只出现一次的数字,还需要考虑写法是否满足题目的空间要求。这份笔记保留了最先想到的哈希表方案,再把它与异或思路放在一起比较。相关运算性质有单独的说明,Python 实现也与分析相配;对顺序执行的循环、时间开销和额外空间的讨论,贯穿两种写法的取舍。
斐波那契数和零钱兑换被放在同一份动态规划笔记里,沿着递归、备忘录与迭代几种写法逐步展开。前一道题侧重重复计算和状态保存的变化,后一道题则涉及状态定义、不可达情形及初始化的考虑。各个阶段都配有 Python 代码,也保留了从直观想法走到另一种实现时的说明。