1. 程式人生 > 其它 >教育後臺管理系統:Maven的常用命令 & 依賴範圍

教育後臺管理系統:Maven的常用命令 & 依賴範圍

劍指 Offer 10- I. 斐波那契數列

遞迴

時間複雜度指數級,很多值重複計算

動態規劃

每一項只計算一次,時間複雜度O(n)

class Solution {
public:
    int fib(int n) {
        int MOD=1000000007;
        if(n<2)
        {
            return n;
        }
        int a=0,b=1,tmp=0;
        for(int i=2;i<=n;i++)
        {
            tmp=b;
            b=(a+b)%1000000007
; a=tmp; } return b; } };

矩陣快速冪

斐波那契數列數列,可以認為是

轉化為一個矩陣的n次方和一個矩陣的乘積,優化的地方在於求n次方,我們可以使用快速冪,當然矩陣的快速冪比實數的快速冪複雜一點。

class Solution {
public:
    const int MOD = 1000000007;
    int fib(int n) {
       if(n<2)
       {
           return n;
       }
       vector<vector<long
>> q = {{1,1},{1,0}}; vector<vector<long>> ans = pow(q,n-1); return ans[0][0]; } ​ vector<vector<long>> pow(vector<vector<long>>& a,int n) { vector<vector<long>> ret ={{1,0},{0,1}}; while(n > 0) {
if(n & 1) { ret = multiply(ret,a); } n >>= 1; a = multiply(a,a); } return ret; } ​ vector<vector<long>> multiply(vector<vector<long>>& a ,vector<vector<long>>& b) { vector<vector<long>> c = {{0,0},{0,0}}; for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { c[i][j]=(a[i][0]*b[0][j]+a[i][1]*b[1][j])%MOD; } } return c; } };