内存按字节编址,地址范围决定最大可寻址空间,常见题型为地址容量计算。
编译器将高级语言源代码翻译为目标代码,预处理、编译、汇编、链接四个阶段。
逻辑运算优先级:! > && > ||,注意短路求值特性,避免写出恒真/恒假式。
图像文件大小 = 分辨率 × 色彩深度(bit)/ 8(字节),注意单位换算(1B=8bit)。
优化版冒泡通过标志位提前结束,最坏O(n²),最好O(n),注意比较次数和交换次数区别。
递归分解数组,取左右最小值比较,注意递归终止条件和栈深度。
链表插入/删除O(1)(已知位置),随机访问O(n),不需要连续存储空间。
树中边数 = 顶点数 - 1,任何连通无环图即树,注意森林情况。
不同进制先统一转十进制再相加,或按位加后进位,结果再转回目标进制。
排列有序(P),组合无序(C),注意“至少/至多”用补集或分类讨论。
后进先出(LIFO),入栈出栈序列合法性判断用模拟或卡特兰数验证。
高度h(根为1)的完全二叉树节点数范围 [2^(h-1), 2^h - 1],常用公式 log2(n)+1。
天干地支60年一循环,按年份取模计算,注意起始年份(如1984为甲子)。
用于求正整数解组数,n个相同元素分给m组(每组至少1个)为 C(n-1, m-1)。
古典概型:事件数/样本空间总数,注意有序与无序对概率的影响。
按规则映射或替换字符,注意ASCII码转换和边界条件。
统计加法过程中进位次数,逐位相加并记录进位标志。
双指针合并有序数组,注意空间开销和边界处理。
试除法从2到sqrt(n),每找到一个质因子除尽计数,注意n本身为质数情况。
按右端点排序,选择最少区间覆盖目标段,贪心策略为每次选右端点最远且左端合法的区间。


面向对象三大特性:封装、继承、多态,C++/Java/Python是,C不是。
计算机科学最高奖,由图灵奖得主判断相关贡献,常考获奖者与其领域对应。
存储单位:1KB=1024B,1MB=1024KB,1GB=1024MB,注意与十进制区分。
n个数找最大值至少 n-1 次比较,找最大和次大至少 n + ceil(log2n) - 2 次。
出栈序列需满足“较大数后不能出现比它小且未逆序”的规律,或用栈模拟验证。
连通图有n个点、m条边,删 m - (n-1) 条边可变成树(保持连通且无环)。
按权展开:∑(位×2^i),从小数点后为负次幂,注意整数部分从0开始。
n个节点的完全二叉树形态唯一(从上到下、左到右依次填充),非完全则用卡特兰数。
用栈操作运算符,数字直接输出,遇到右括号弹出至左括号,优先级决定栈内/外比较。
从n人选k人组成团队,通常用组合数C(n,k),若分角色则用排列P(n,k)。
贪心构造:每次选频率最小的两树合并,带权路径长度WPL = 所有叶子频率×深度之和。
有重复元素的全排列数 = n! / (∏(每种重复次数)!),注意去重。
递归函数直接展开或递推求解,注意递归终止条件避免无限递归。
DFS沿分支深入到底后回溯,用栈或递归实现,注意访问标记避免重复。
经典动态规划或贪心,考虑船容量和最少时间,注意状态转移。
位运算包括 & | ^ ~ << >>,统计二进制中1的个数常用 n&(n-1)。
每3字节转4个6位值,查表输出,填充‘=’,注意索引计算和位拼接。
线性筛质数,每个合数只被最小质因子标记,O(n),同时可维护最小质因子。
循环报数出列,用链表模拟或递推公式 f(n,m) = (f(n-1,m)+m)%n。
枚举左上角和右下角,或按行列位置公式计算子矩形个数 = n(n+1)/2 × m(m+1)/2。


封装隐藏内部状态,继承复用基类,多态允许接口多种实现。
同2021-5,重点检查任意元素出栈后,比它小的元素必须按从大到小出栈。
指针存储地址,*解引用,&取地址,指针加减与类型大小相关,注意野指针和空指针。
数组连续空间、随机访问快、插入删除慢;链表不连续、插入删除快、随机访问慢。
两栈模拟队列(入队压栈1,出队若栈2空则栈1全弹出到栈2),反之用两队列模拟栈。
从右往左扫描,操作数入栈,运算符按优先级处理,结果反转。
同2021-11,注意构造过程中新节点频率为两子节点之和。
编号从1开始,左子=2i,右子=2i+1,父=⌊i/2⌋,深度=⌊log2i⌋+1。
有向图邻接矩阵不对称,强连通需双向可达,出度=行和,入度=列和。
可用数组或链表实现,注意栈顶指针和队头队尾指针移动,循环队列处理溢出。
插入节点需修改前后节点的next和prev指针,顺序不能错(先改新节点,再断旧链接)。
稳定:冒泡、插入、归并;不稳定:选择、快排、希尔、堆排。判断标准:相等元素相对顺序是否改变。
按权展开(权为8的幂),同二进制转十进制,注意高位为0不影响。
字符串长度为n,子串总数 = n(n+1)/2(含自身,不含空串),注意“连续”子串。
递归需有基线条件和递归步骤,能用递推或数学归纳法理解。
字符转为ASCII码后位运算,注意大小写转换(异或32)和字母判断(范围)。
经典动态规划:dp[k][m] = dp[k-1][m-1] + dp[k][m-1] + 1,用最少移动确定临界楼层。
牛顿迭代法求平方根:x_{n+1} = (x_n + a/x_n)/2,收敛快,注意精度判断。
按规则(如连续重复计数)展开字符串,注意嵌套和数字与字母的交替解析。
根据加密逆过程或数学关系推导,常用模运算、位运算或方程求解。


const修饰变量不可修改,修饰指针分常量指针和指针常量,修饰成员函数不改变对象。
逢八进一,同十进制加法类似,只是满8进1,注意借位时借1当8。
所有成员共用同一内存空间,大小等于最大成员大小,一次只能存储一个成员的值。
在已知节点后插入,先存新节点next,再改前驱next指向新节点,注意头节点和尾节点特殊处理。
满m叉树高度h的节点数 = (m^h - 1)/(m - 1),高度与节点数反推用对数。
从n个不同元素中选k个,C(n,k) = n!/(k!(n-k)!),注意对称性 C(n,k)=C(n,n-k)。
逐位相乘累加到对应位置,再统一进位,注意结果位数和去除前导零。
扫描后缀,遇到操作数压栈,遇到运算符弹出两个数,组合成中缀表达式(注意括号添加)。
先将各数转为十进制求和,再转为目标进制,或直接按位加并处理进位。
同2021-11,重点考查WPL计算和编码长度分配。
先序(根左右)、中序(左根右)、后序(左右根),已知两种遍历可唯一确定第三种(需含中序)。
有向无环图,每次取入度为0的节点,删去其出边,用于确定依赖顺序,多个结果。
1 Byte = 8 bit,1 KB = 1024 B,常见单位换算,注意速度单位bps与存储B区分。
同本年度第6题,注意组合数的基本性质和常用恒等式。
Windows/Linux/macOS为操作系统,其他如编译器、IDE不是。
s = (a+b+c)/2,面积 = sqrt(s(s-a)(s-b)(s-c)),注意三角形三边不等式条件。
动态规划 dp[i][j] = dp[i-1][j-1]+1(字符相等)或 max(dp[i-1][j], dp[i][j-1]),O(nm)。
枚举1到sqrt(n)找因子,每个因子对应一对(i和n/i),平方和累加,注意重复。
在有序数组中找缺失值,用二分判断mid处值是否等于下标+偏移,然后缩小区间。
dp[i][j] = min(替换、插入、删除),分别对应 dp[i-1][j-1]+cost,dp[i][j-1]+1,dp[i-1][j]+1。
























n位无符号整数最大值为 2^n - 1,如8位为255,注意溢出时回绕。
同两位都为1结果为1,常用于取低n位(x & ((1<<n)-1))或判断奇偶(x&1)。
同2021-13,注意直接展开与递推式的转换。
构造哈夫曼树后,WPL = 所有非叶节点权值之和(也等于各叶子权值×深度之和)。
所有顶点入度之和 = 出度之和 = 边数,且任意有向图满足该恒等式。
同2023-6,注意“至少一个”用总方案数减去不满足条件的方案数。
用布尔代数定律(吸收、分配、德摩根)化简,或用真值表验证等价。
对模运算的递推序列,检查相邻状态重复即可确定周期,常用快慢指针(Floyd判圈)。
string长度用 .size(),支持+连接、==比较、下标访问(不检查越界),注意与字符数组区别。
值传递复制副本,引用传递(&)直接操作原变量,可避免拷贝且能修改实参。
网格中从(0,0)到(m,n)的最短路径数 = C(m+n, m)(只能向右/上),注意障碍物处理。
交换次数等于逆序对数,每次交换消除一个逆序对。
同2023-9,注意各进制前缀和合法性检查。
n个节点完全二叉树叶子数 = ⌊(n+1)/2⌋(或 n/2 向上取整),可用编号性质推导。
同2022-5,可用双栈模拟队列,或用双端队列实现灵活操作。
枚举三个数,用最大公约数 gcd(a,b,c)=1 判断互质,复杂度优化可用容斥或莫比乌斯。
将数组分成k组使某种代价最小,常见状态 dp[i][j] 表示前i个分j组的最优值。
同2023-17,注意输出长度和回溯构造序列的方法。
同2022-19,注意嵌套重复和数字可能多位,用栈或递归解析。
根据条件进行多分支判断,按题意逐步模拟,注意边界条件和逻辑运算符优先级。