滚动数组
作用在于优化空间,主要应用在递推或动态规划中,可以循环利用空间。
例如斐波那契数列,只由前面两个元素得出下一个元素
int d[];
d[0] = d[1] = 1;
for(i = 2;i<80;i++)
{
d[i%3] = d[(i-1)%3] + d[(i-2)%3];
}
二维数组滚动
int i,j,d[100][100];
for(int i = 1; i < 100;i++)
for(int j = 0; j < 100;j++)
d[i][j] = d[i-1][j] + d[i][j-1];
可以看出d[i][j]
只依赖于d[i-1][j]
,d[i][j-1]
运用滚动数组
int i, j, d[2][100];
for(int i = 1;i < 100;i++)
for(int j = 0;j < 100;j++)
d[i%2][j] = d[(i - 1) % 2][j] + d[i % 2][j - 1];
// 行只和当前行和上一行有关联,行滚动,但是列不能滚动