Skip to content

Linear Data Structure Summary

0. Enumeration method

对于 双变量问题,例如两数之和 a+b = t, 可以枚举b右侧的数,同时维护&查找左侧枚举过的元素有没有a=t-b。这可以用哈希表维护&记录每一个枚举过的数和该数的位置。这种方法叫“枚举右,维护左”

枚举右,维护左

枚举中间

1. presum

classic prefix sum

理解前缀和定义:对于nums数组,presum[i] = presum[i-1]+nums[i-1], presum[0]=0, presum[1]=presum[0]+nums[0]....

子数组的元素和可以转化成两个前缀和的差: sum of array i~j = presum[i]-presum[j], sum of array 0~j = presum[j]-presum[0]

presum+hashmap

通常需要 枚举右,维护左 的技巧

二维前缀和

2. 差分数组 difference array

3. 栈 stack

基础原理

临项消除

表达式解析

利用stack实现“先计算乘除,后计算加减”,来计算一个表达式

合法括号字符串

用stack,遇到左括号就加入,遇到右括号就尝试pop&消除

4. 单调栈(重点)

4. 队列 queue

5. 堆 heap