【Leetcode】1646. Get Maximum in Generated Array
阿新 • • 發佈:2021-01-17
技術標籤:# 貪心、動態規劃與記憶化搜尋leetcode動態規劃演算法
題目地址:
https://leetcode.com/problems/get-maximum-in-generated-array/
給定一個長
n
+
1
n+1
n+1的陣列
A
A
A,其中
A
[
0
]
=
0
,
A
[
1
]
=
1
A[0]=0,A[1]=1
A[0]=0,A[1]=1,並且
A
[
i
]
=
{
A
[
i
/
2
]
,
i
=
2
k
A
[
i
/
2
]
+
A
[
i
/
2
+
1
]
,
i
=
2
k
+
1
A[i]=\begin{cases} A[i/2], i=2k\\ A[i/2]+A[i/2+1], i=2k+1 \end{cases}
A[i]={A[i/2],i=2kA[i/2]+A[i/2+1],i=2k+1問
A
A
A的最大值是多少。
直接遞推。程式碼如下:
public class Solution {
public int getMaximumGenerated(int n) {
if (n <= 1) {
return n;
}
int res = 0;
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = i % 2 == 0 ? dp[i >> 1] : dp[i >> 1] + dp[(i >> 1) + 1];
res = Math.max(res, dp[i]);
}
return res;
}
}
時空複雜度 O ( n ) O(n) O(n)。