剣は動的計画法の8日目のオファーを指します(単純)

剣はオファー10を指します-I。フィボナッチ数列

トピックのアイデア

明らかにそれは再帰的な関係です、ただそれを直接書いてください

トピックコード

c++コード

class Solution {
    
    
private:
    int mod = 1e9+7;
    int f[110];
public:
    int fib(int n) {
    
    
        f[0]=0,f[1]=1;
        for(int i=2;i<=n;i++){
    
    
            f[i] = (f[i-1] + f[i-2])%mod;
        }
        return f[n];
    }
};

Pythonコード

class Solution:
    def fib(self, n: int) -> int:
        a = 0
        b = 1
        c = 0
        mod = 1e9+7
        if not n :
            return a
        elif n==1 :
            return b
        else:
            for i in range(2,n+1):
                c = (a+b)%mod
                a = b%mod
                b = c%mod
            return int(c)

剣はオファー10を指します-II。カエルのジャンプステップ

トピックのアイデア

前のトピックと同様です。それはnステップに過ぎません。n-1番目とn-2番目のステップからしか上がれません。

トピックコード

c++コード

class Solution {
    
    
private:
    int mod = 1e9+7;
    int f[110];
public:
    int numWays(int n) {
    
    
       f[0]=1,f[1]=1,f[2]=2;
        for(int i=2;i<=n;i++){
    
    
            f[i] = (f[i-1] + f[i-2])%mod;
        }
        return f[n];
    }
};

Pythonコード

class Solution:
    def numWays(self, n: int) -> int:
        a = 1
        b = 1
        c = 0
        mod = 1e9+7
        if not n :
            return a
        elif n==1 :
            return b
        else:
            for i in range(2,n+1):
                c = (a+b)%mod
                a = b%mod
                b = c%mod
            return int(c)

剣はオファー63を指します。株式の最大利益

トピックのアイデア

典型的な問題、2つの配列、最初のグループは株を購入した後の最大利益を表し、2番目のグループは売却後の最大利益を表します

トピックコード

c++コード

class Solution {
    
    
public:
    int maxProfit(vector<int>& prices) {
    
    
        int s[100010],b[100010];
        int n = prices.size();
        for(int i=0;i<100010;i++){
    
    
            s[i]=-100000000;
            b[i]=0;
        }
        for(int i=1;i<=n;i++){
    
    
            s[i]=max(s[i-1],0-prices[i-1]);
            b[i]=max(b[i-1],s[i]+prices[i-1]);
            //cout<<s[i]<<" "<<b[i]<<endl;
        }
        return b[n];
    }
};

Pythonコード

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        s = [-1000000]*100010
        b = [0]*100010
        n = len(prices)
        for i in range(1,n+1):
            s[i] = max(s[i-1],0-prices[i-1])
            b[i] = max(b[i-1],s[i]+prices[i-1])
        return b[n]

この記事が私の友達に役立つなら、私はいいねとサポートをしたいと思います〜ありがとうございました〜

ここに画像の説明を挿入


おすすめ

転載: blog.csdn.net/weixin_46627433/article/details/123006083