要记住的一些规律
同余:两个数对k的余数相等,则两数之差可以被k整除
通用经验
- 注意看题目给定的条件,如果没有特殊说明,只关注合理的输入。
- 如果调试不过,注意: =写成了==
- 用例不完全通过的时候就构造边界用例
- 使用队列的时候用collections.deque,比直接使用列表模拟队列效率要高。eg:
que = deque()
que.append()
que.appendleft()
que.pop()
que.popleft()
设计题
- 一定要理解题意,大概理解题意后,将给出的例子都推演一遍。
二分法
- 两段性
- 二分的本质是两段性,并非单调性。只要一段满足某个性质,另一段不满足某个性质,就可以用二分。
- 二段性还能继续细分,不仅仅只有满足01特性(满足/不满足)的二段性可以使用二分法。满足1?特性(一定满足/不一定满足)也可以用二分法。
- 边界处理
mid是向左取整的话,left每次都要+1。向右取整,right每次都要+1.
动态规划
- dp数组中确定初始值
- 确定递推公式,即状态转移方程。动态规划就是找到递推公式,根据递推公式逐步推出最终结果。
前缀和
【应用范围】:求解恰好等于某一个值的场景。
【求解思路】:将恰好为某个值转化成容易求解的两个值差的情况。
【应用场景】:
- 满足条件的窗口长度是可变的,可以将可变的窗口长度转化为不可变的窗口长度,迂回处理。
滑动窗
【应用场景】:要窗口长度能是固定的时候采用滑窗处理。
递归
- 遇到递归的问题,最好画出递归树。
- 递归问题,第一步寻找递归结束条件。