leetCode 以及 剑指 offer 算法相关题目
超时问题往往代表代码正常
由于存在重复计算问题导致超时、
故需考虑记录已经计算的值或者状态、减少次数
深度遍历靠栈来实现
宽度遍历靠队列实现
深度、广度遍历核心还是回溯法、回溯法需要注意更改回溯状态
遍历得考虑好边界退出条件
动态规划解题关键
第一个要点需要考虑 子问题方程式
第二个要点需要考虑方程式连续问题。由于子问题决定下一个问题的最优解。故动态规划方程式必须连贯起来
求二维数组正方形最大面积 key point: dp[i-1][j-1], dp[i-1][j], dp[i][j-1];
- 两个不同数^ ==相当于 无进位加法
- 两个不同数& 相当于 判断是否有进位
- & (偶数- 1) 相当于 取模操作
- n & 1 相当于 对2取模操作 相当于每次获取二进制最末尾一位数字值
- n & 1 并且 n 无符号右移相当于二进制数据反转
- 考虑使用双指针
- 考虑使用队列
- 滑动窗口模板
滑动窗口关键值
窗口的大小 当窗口太小时 窗口往右扩展。窗口太大时缩小窗口
窗口左右边界问题。确定如何移除窗口条件
窗口需要进行初始化。慎重考虑初始化条件
可以考虑使用list存储窗口的值
滑动窗口经典题目
trick 数组移动 从左往右 (left + right) / 2 + 1 从右往左 (left + right) / 2 -1
边界值left <= right 或者 left < right 取决于代码思路
- 34. Find First and Last Position of Element in Sorted Array
- 154. Find Minimum in Rotated Sorted Array II
- 162. Find Peak Element
空集是任何一个集合的子集
摩尔投票法 关键在于找出候选者
位运算 需要使用两位
数字中1的个数 todo
key point: 将数组分割成两个不同的部分
key point: digit = 1 + (n-1) mod 9
思路: 进行位运算
树的定义: tree is an undirected graph in which any two vertices are connected by exactly one path. In other words, any connected graph without simple cycles is a tree.”