蓝桥杯 试题 入门训练 Fibonacci数列——9行代码AC

难点:

1、容易习惯性的使用递归解法,但递归的时间复杂度为O(2^n),超出时间限制。
2、加一次,就取余一次,避免溢出
3、采用非递归很容易想到用数组存储,空间复杂度为O(n)。 但更优化的解法是:定义两个变量交替互换,使空间复杂度也降低到O(1)
下面我给出两种代码,供大家参考。

欠佳的代码 (时间:O(n),空间O(n))

#include<iostream>
#define Max 1000005
using namespace std;
int a[Max]; //注意要定义全局变量,因为main函数中的数组最大容量为50W+ ,会溢出
int main() {
	int n;
	cin >> n;
	a[0] = 1; a[1] = 1;
	for(int i = 2; i < n; i++) {
		a[i] = ((a[i-1]+a[i-2])%10007);
	}
	cout << a[n-1];
	return 0;
}

最优解(时间:O(n), 空间:O(1))

#include<iostream>
using namespace std;
int main() {
	int n;  cin >> n;
	int n1 = 1, n2 = 1;
	for(int i = 2; i < n; i++) { int t = n2; n2 = ((n1+n2)%10007);  n1 = t; }
	cout << n2;
	return 0;
} 
发布了73 篇原创文章 · 获赞 61 · 访问量 4768

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/104541326
今日推荐