滚动数组是一种算法优化思想,即让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用。
滚动数组一般在动态规划和状态压缩算法方面用的多,而且优化后效率很高,推荐使用。
斐波那契数列普通解法:
long long d[110];
#include<iostream>
using namespace std;
int main()
{
d[0]=1;
d[1]=1;
for(int i=2;i<110;i++)
{
d[i]=d[i-1]+d[i-2];
}
printf("%lld\n",d[100]);
return 0;
}
发现数列中每一项f[i]只与f[i-1]和f[i-2]有关,使用滚动数组可以节约空间。
使用滚动数组解法
#include<iostream>
using namespace std;
long long d[101];
int main()
{
d[1]=1;
d[2]=1;
for(int i=2;i<110;i++)
{
d[i]=d[i-1]+d[i-2];
}
printf("%lld\n",d[100]);
return 0;
}
第二段代码没使用滚动数组吧,还是占用了大量空间,应该加一个对3取模
第二个代码不对,会越界 吧
会......吗?
这没有吗,数组初始化大小为3.
另外运行后结果也不对呀,都是0
刚才没仔细看,的确有问题,目前已修改代码,谢谢orz