滚动数组简介
滚动数组顾名思义就是让数组滚起来,是一种用时间去换空间的想法,往往在时间充足,空间超限的情况下适用。
滚动数组基本上都是在动态规划DP和递推中使用,大部分都是通过数组中的值结合其他的数更新数组中的某一位,之后在数组中交换数值的位置,再更新下一位。
滚动数组应用实例
就以斐波那契数列为例
斐波那契数列:1,1,2,3,5,8,13,21……
如果我们要求第i位的数值,往往都会用num[i] = num[i - 1] + num[i - 2]。这样就要开一个num[N]的数组了。可是如果运用了滚动数组的优化,就只用开num[3]了,每次让num[0] = num[1] + num[2]之后再让num[2] = num[1],num[1] = num[0]就OK了。这样就大大优化了空间。
以下为斐波那契数列滚动数组优化了的代码
# include <cstdio>
# include <iostream>
# include <cmath>
# include <cstring>
# include <algorithm>
using namespace std;
# define FOR(i, a, b) for(int i = a; i <= b; i++)
# define _FOR(i, a, b) for(int i = a; i >= b; i--)
int n;
int num[3];
int main()
{
scanf("%d", &n);
num[1] = 1;
num[2] = 1;
FOR(i, 3, n){
num[0] = num[1] + num[2];
num[2] = num[1];
num[1] = num[0];
}
printf("%d\n", num[1]);
return 0;
}
God Bless You For Ever!