算法的空间复杂度不是考核重点,只要不是太夸张即可。以 C++ 的 32 位 int 类型为例,它占到 32 bit 内存。用给定内存限制大小(如,256 Mb)除以这个 32 bit 就能得到理论数组开辟的最大元素数量。
尤其在蓝桥杯的阶梯难度用例下,你可以充分利用内存空间设计你的算法,利用空间换时间,通过更多的用例。
一个技巧是,把题目存储数据的数组开在全局的静态内存空间,可以有效规避栈溢出的风险,同时使得数组拥有全 0 的初始值。
#include <iostream>using namespace std;const int N = 1e5 + 4; // 最大数据范围 N,多开一点避免越界int a[N]; // 建议在这里开数组int main() {// int t[N]; // 避免在函数内部开大数组return 0;}
空间复杂度也有各种优化的方法,但通常仅在必要时考虑。在需要考虑空间时,也大概率是用到比较常规的技巧(例如,动态规划的降维,滚动数组等)。
