若 i 为奇数,则:a[i∗2+1]=a[i]+a[i+1] ,可以变成 a[i]=a[⌊2i⌋]+a[⌊2i⌋+1]。
若 i 为偶数,则:a[i∗2]=a[i] ,可以变成 a[i]=a[2i]。
结合一下:a[i]=a[⌊2i⌋]+i%2∗a[⌊2i⌋+1]。
代码
C++
const int N = 105;int a[N];class Solution {public: int getMaximumGenerated(int n) { a[0] = 0; a[1] = 1; int res = a[n]; for ( int i = 2; i <= n; i ++ ) { a[i] = a[i / 2] + i % 2 * a[i / 2 + 1]; res = max(res, a[i]); } return res; }};
Java
class Solution { public int getMaximumGenerated(int n) { int a[] = new int[n + 2]; a[0] = 0; a[1] = 1; int res = a[n]; for ( int i = 2; i <= n; i ++ ) { a[i] = a[i / 2] + i % 2 * a[i / 2 + 1]; res = Math.max(res, a[i]); } return res; }}