【Leetcode】1646. Get Maximum in Generated Array

题目地址:

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)

猜你喜欢

转载自blog.csdn.net/qq_46105170/article/details/112708204