1. 程式人生 > 其它 >劍指Offer-第8天 動態規劃(簡單)

劍指Offer-第8天 動態規劃(簡單)

第一題

題目連結:https://leetcode.cn/problems/fei-bo-na-qi-shu-lie-lcof/

個人題解:迭代即可,可以減少空間複雜度,只需要使用常數級別的空間即可。

程式碼:

const int mod=1e9+7;
class Solution {
public:
    int fib(int n) {
        if(n<2) return n;
        int a=0,b=0,c=1;
        for(int i=2;i<=n;i++){
            a=b;
            b=c;
            c=(a+b)%mod;
        }
        return c;
    }
};

執行截圖:

第二題

題目連結:https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/

個人題解:迭代即可,和上一題幾乎一樣

程式碼:

const int mod=1e9+7;
class Solution {
public:
    int numWays(int n) {
        if(n==0) return 1;
        if(n<=3) return n;
        int a=0,b=0,c=1;
        for(int i=1;i<=n;i++){
            a=b;
            b=c;
            c=(a+b)%mod;
        }
        return c;
    }
};

執行截圖:

第三題

題目連結:https://leetcode.cn/problems/gu-piao-de-zui-da-li-run-lcof/

個人題解:動態規劃,找到現在為止的最小值與當前值的最大差值即可。

程式碼:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int maxn=0,minn=INT_MAX;
        for(auto x:prices){
            maxn=max(maxn,x-minn);
            minn=min(minn,x);
        }
        return maxn;
    }
};

執行截圖: