算法内容
本文件实现牛客 KY191「矩阵幂」的一个基础版本。程序读取矩阵阶数 n 和幂次 k,再读取 n 阶矩阵并输出矩阵的 k 次幂。
mul 完成普通矩阵乘法,并把结果写回第一个矩阵;matPow 根据 pow 的取值执行固定次数的乘法。当前实现只显式处理 1 到 5 次幂,适合题目幂次范围较小或练习矩阵乘法流程的场景。矩阵乘法单次时间复杂度 O(n^3)。如果 k 更大,通常需要改为快速幂,将复杂度优化为 O(n^3 log k)。
算法实现
1 |
|
本文件实现牛客 KY191「矩阵幂」的一个基础版本。程序读取矩阵阶数 n 和幂次 k,再读取 n 阶矩阵并输出矩阵的 k 次幂。
mul 完成普通矩阵乘法,并把结果写回第一个矩阵;matPow 根据 pow 的取值执行固定次数的乘法。当前实现只显式处理 1 到 5 次幂,适合题目幂次范围较小或练习矩阵乘法流程的场景。矩阵乘法单次时间复杂度 O(n^3)。如果 k 更大,通常需要改为快速幂,将复杂度优化为 O(n^3 log k)。
1 |
|
本文件是 C++ decltype、引用折叠和数组形参退化的学习代码。
f 对比 decltype(++i)、decltype(i++) 和 decltype(&i) 的推导结果:前置自增表达式得到左值引用类型,后置自增表达式得到值类型,取地址得到指针类型。f1 观察数组作为函数参数时会退化为指针。f2 则通过左值引用、右值引用和 move 展示引用变量在 decltype 中的类型保持规则。这个文件重点不是算法题,而是验证 C++ 类型推导行为。
1 |
|
本文件实现基于快速选择思想的第 k 小元素查找。输入阶段会先用布尔数组去重,再在去重后的数组中查找第 k 小值。
partition 使用类似快速排序的双指针划分,把基准元素放到最终位置;searchK 根据基准位置和目标下标 k 的关系,只递归进入包含目标的半边区间,而不是完整排序。平均时间复杂度为 O(n),最坏情况下为 O(n^2)。代码中会打印每次划分后的数组和基准位置,方便观察快速选择过程。
1 |
|
本文件实现素数判断和进制反转判断。程序持续读取 n 和进制 d,判断 n 是否为素数,以及 n 在 d 进制下反转后的数是否也为素数。
initPrimes 预生成前 MAX_PRIME 个素数;isPrime 在素数表中二分查找目标数;reverse 按 d 进制逐位取余并重新累积,得到反转后的数。主循环输出 Yes 或 No。这个写法适合数值范围受控的题目;如果输入可能超过预生成素数表覆盖范围,则需要改成按平方根试除或扩大素数表。
1 |
|
本文件是 C++ 对象传值、指针对象生命周期和析构行为的学习代码。
代码定义类 A 和结构体 B,并尝试通过函数传值修改对象副本。main 中使用 new A 创建堆对象,再通过 delete a 触发析构。需要特别注意:A 的析构函数内部又执行 delete this,这会导致递归析构或重复释放,是未定义行为。这个例子可以作为理解对象生命周期风险的反面案例:析构函数里通常不应该 delete this。
1 |
|
本文件演示 C++ 多继承和纯虚函数实现。
A 和 B 都是包含纯虚函数的抽象基类,C 同时继承二者,并分别实现 afun 和 bfun。main 创建 C 的对象后调用两个接口,输出对应返回值。这个例子用于观察一个派生类如何同时满足多个抽象接口,以及多继承下虚函数调用的基本形式。
1 | class A { |
本文件演示差分数组的基本思想。差分数组适合处理“区间统一增减、最后还原数组”的场景。
diffOf 将原数组转换为差分数组,其中 diff[i] = data[i] - data[i - 1];dataOf 对差分数组求前缀和,还原原数组。主循环读取 l, r, diff,表示对半开区间 [l, r) 加上 diff,只需要执行 data_diff[l] += diff 和 data_diff[r] -= diff,再还原即可看到更新后的数组。区间更新为 O(1),还原数组为 O(n)。
1 |
|
本文件是 C/C++ 数组越界行为的实验代码。
代码定义长度为 5 的数组 a,但循环写入 a[0] 到 a[30],明显越界。越界写会破坏栈上的其他局部变量或控制信息,因此可能出现循环条件异常、输出异常、崩溃等未定义行为。这个文件的学习重点是:C/C++ 不会自动检查原生数组边界,越界访问不是稳定可依赖的行为,调试时可以借助 AddressSanitizer 等工具定位。
1 |
|
1 | class Solution { |
4ms,和最快的思路刚好相反,用map存储arr的index,最快的思路是反过来,用map存一个piece的第一个index
1 | class Solution { |
1 | struct List { |