lurenaa的博客

😂自顶向下

通常情况下,递归是一种直观而有效的实现算法的方法。 但是,如果我们不明智地使用它,可能会给性能带来一些不希望的损失,例如重复计算。
记忆化(memoization),可以用来避免这个问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
int fib(int N) {
f.resize(1000);
fill(f.begin(), f.end(), -1);
f[0] = 0;
f[1] = 1;
return helper(N);
}
int helper(int N)
{
if(f.at(N) != -1)
return f.at(N);
int val = helper(N - 1) + helper(N -2);
f[N] = val;
return val;
}
private:
vector<int> f;
};

Accepted

31/31 cases passed (4 ms)

Your runtime beats 74.12 % of cpp submissions

Your memory usage beats 5.01 % of cpp submissions (8.7 MB)

😂自底向上迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int fib(int N) {
f.resize(1000);
fill(f.begin(), f.end(), -1);
f[0] = 0;
f[1] = 1;
return helper(N);
}
int helper(int N)
{
for(int i = 2; i <= N; ++i)
f[i] = f[i - 1] + f[i - 2];
return f[N];
}
private:
vector<int> f;
};

Accepted

31/31 cases passed (4 ms)

Your runtime beats 74.12 % of cpp submissions

Your memory usage beats 8.19 % of cpp submissions (8.5 MB)