思路
-
对于
int
数据处理可考虑:- 排序
- 位运算,如异或
- 数学规律
-
递归【以中间情况来思考】
-
从后往前!!比如在特定空间排序
-
左右匹配:可用栈,左值直接入栈,右值与栈尾匹配
-
连续长度的最值问题
优先考虑滑动窗口
-
对于多种走法的最值问题大多数情况下优先考虑BFS,如果用BFS解决不了再考虑DFS。 对于多种走法的概率或种数问题则考虑用动态规划。
-
利用位运算:
-
奇偶判断:&1 -> 与运算
-
2 倍运算:利用 >>n -> /2^n,n<< ->*2^n
-
-
由于python的特性,或许在一开始就申请完空间会比采用append更高效
-
首尾指针:left, right = 0, length - 1; left < right
-
快慢指针:slow, fast = 0, 0; fast走的快
-
快排的base可以取nums[low]/nums[high]
对应:需要注意取nums[low]则需先从从高位开始向前,取nums[high]则需先从低位向后。
def quick_sort(nums: list, low: int, high:int): if low >= high: return i, j = low, high # 对应 base = nums[low] while i < j: while i < j and nums[j] >= base: # 对应 j -= 1 nums[i] = nums[j] while i < j and nums[i] <= base: # 对应 i += 1 nums[j] = nums[i] nums[i] = base quick_sort(low, i - 1) quick_sort(i + 1, high)
-
巧妙利用 短路特性
-
搜索二叉树与中序遍历,左小右大
-
完全二叉树叶子节点为所有节点的一半
-
建立【大顶堆/小顶堆】只能保证堆顶的【最大/最小值】
-
HashMap用于解决匹配问题,如两数之和等
-
快慢指针实现中间节点的获取 234.回文链表
ListNode slow = head; ListNode fast = head; // 快慢指针找到中间节点 while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } if (fast != null) { // 说明存在奇数中间节点 // 相关处理逻辑,如跳过等 }
2023/3/7...大约 3 分钟