C++滚动数组(优化空间)

滚动数组简介

滚动数组顾名思义就是让数组滚起来,是一种用时间去换空间的想法,往往在时间充足,空间超限的情况下适用。

滚动数组基本上都是在动态规划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!

发布了33 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/SkeletonKing233/article/details/99632088