算法的空间复杂度不是考核重点,只要不是太夸张即可。以 C++ 的 32 位 int 类型为例,它占到 32 bit 内存。用给定内存限制大小(如,256 Mb)除以这个 32 bit 就能得到理论数组开辟的最大元素数量。

    尤其在蓝桥杯的阶梯难度用例下,你可以充分利用内存空间设计你的算法,利用空间换时间,通过更多的用例。

    一个技巧是,把题目存储数据的数组开在全局的静态内存空间,可以有效规避栈溢出的风险,同时使得数组拥有全 0 的初始值。

    1. #include <iostream>
    2. using namespace std;
    3. const int N = 1e5 + 4; // 最大数据范围 N,多开一点避免越界
    4. int a[N]; // 建议在这里开数组
    5. int main() {
    6. // int t[N]; // 避免在函数内部开大数组
    7. return 0;
    8. }

    空间复杂度也有各种优化的方法,但通常仅在必要时考虑。在需要考虑空间时,也大概率是用到比较常规的技巧(例如,动态规划的降维,滚动数组等)。