BAT算法面試題(11)--最長的斐波那契子序列的長度(動態(tài)規(guī)劃法)

BAT面試算法進(jìn)階(10)- 最長的斐波那契子序列的長度(暴力法)
BAT面試算法進(jìn)階(8)- 刪除排序數(shù)組中的重復(fù)項(xiàng)
BAT面試算法進(jìn)階(7)- 反轉(zhuǎn)整數(shù)
BAT面試算法進(jìn)階(6)- BAT面試算法進(jìn)階(6)-最長回文子串(方法二)
BAT面試算法進(jìn)階(5)- BAT面試算法進(jìn)階(5)- 最長回文子串(方法一)
BAT面試算法進(jìn)階(4)- 無重復(fù)字符的最長子串(滑動法優(yōu)化+ASCII碼法)
BAT面試算法進(jìn)階(3)- 無重復(fù)字符的最長子串(滑動窗口法)
BAT面試算法進(jìn)階(2)- 無重復(fù)字符的最長子串(暴力法)
BAT面試算法進(jìn)階(1)--兩數(shù)之和

一.面試題目

如果序列X_1,X_2,...,X_n 滿足下列條件,就說它是 斐波拉契式的:

  • n >= 3
  • 對于所有 i+2 <= n ,都有X_i + X_{i+1} = X_{i+2} ;

給定一個(gè)嚴(yán)格遞增的正整數(shù)數(shù)組形成序列.找到A中最長的斐波拉契式子序列的長度.如果一個(gè)不存在,返回0.比如,子序列是從原序列A中派生出來的.它從A中刪除任意數(shù)量的元素.而不改變其元素的順序.例如[3,5,8][3,4,5,6,7,8]的子序列.

二.案例

案例(1)

  • 輸入:[1,2,3,4,5,6,7,8]
  • 輸出: 5
  • 原因: 最長的斐波拉契式子序列: [1,2,3,5,8]

案例(2)

  • 輸入:[1,3,7,11,12,14,18]
  • 輸出: 3
  • 原因: 最長的斐波拉契式子序列: [1,11,12],[3,11,14],[7,11,18]

三.解決方案-- 使用Set(集合)暴力法

  • 思路

將斐波拉契式的子序列中的2個(gè)連續(xù)項(xiàng)A[i],A[j] 視為單個(gè)結(jié)點(diǎn)(i,j).整個(gè)子序列是這些連續(xù)結(jié)點(diǎn)的之間的路徑.例如,對于斐波拉契式的子序列,(A[1] = 2,A[2] = 3,A[4] = 5,A[7] = 8,A[10] = 13),結(jié)點(diǎn)的路徑就為(1,2)<->(2,3)<->(4,7)<->(7,10).

這樣做的目的,只有當(dāng)A[i]+A[j] == A[k]時(shí).兩結(jié)點(diǎn)(i,j)和(j,k)才是連貫的.我們需要這個(gè)信息才能知道它們之間是可以連通的.

  • 算法

設(shè)longest[i,j] 是結(jié)束在[i,j]的最長路徑.那么如果(i,j)(j,k)是連通的,longest[j,k] = longest[i,j]+1.由于 i 是由A.index(A[k] - A[j]) 唯一確定的.我們在 i 檢查每組j < k ,并相應(yīng)更新longest[j,k]

四.代碼

class Solution {
public:
    int lenLongestFibSubseq(vector<int>& A) {
        int N = A.size();
        unordered_map<int, int> index;
        for (int i = 0; i < N; ++i)
            index[A[i]] = i;

        unordered_map<int, int> longest;
        int ans = 0;
        for (int k = 0; k < N; ++k)
            for (int j = 0; j < k; ++j) {
                if (A[k] - A[j] < A[j] && index.count(A[k] - A[j])) {
                    int i = index[A[k] - A[j]];
                    longest[j * N + k] = longest[i * N + j] + 1;
                    ans = max(ans, longest[j * N + k] + 2);
                }
            }

        return ans >= 3 ? ans : 0;
    }
};

五.復(fù)雜度分析

  • 時(shí)間復(fù)雜度: O(N^2),其中N指的是A的長度
  • 空間復(fù)雜度: O(NlogM),其中M是A中的最大的元素.

六.學(xué)習(xí)建議

  • 先了解基本思路
  • 在帶著數(shù)據(jù),理解代碼的執(zhí)行

小編OS:

想要獲取更多技術(shù)文章/視頻關(guān)注公眾號!
持續(xù)更新關(guān)注公眾號!

HelloCode 微信公眾號
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缩膝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌开皿,老刑警劉巖绷蹲,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拔妥,死亡現(xiàn)場離奇詭異薪者,居然都是意外死亡斯棒,警方通過查閱死者的電腦和手機(jī)许帐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門劳坑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人成畦,你說我怎么就攤上這事距芬±钥” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵框仔,是天一觀的道長舀武。 經(jīng)常有香客問我,道長离斩,這世上最難降的妖魔是什么银舱? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮跛梗,結(jié)果婚禮上寻馏,老公的妹妹穿的比我還像新娘。我一直安慰自己核偿,他們只是感情好诚欠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漾岳,像睡著了一般轰绵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝗羊,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天藏澳,我揣著相機(jī)與錄音,去河邊找鬼耀找。 笑死翔悠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的野芒。 我是一名探鬼主播蓄愁,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狞悲!你這毒婦竟也來了撮抓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤摇锋,失蹤者是張志新(化名)和其女友劉穎丹拯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荸恕,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乖酬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了融求。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咬像。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出县昂,到底是詐尸還是另有隱情肮柜,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布倒彰,位于F島的核電站审洞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏待讳。R本人自食惡果不足惜预明,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耙箍。 院中可真熱鬧,春花似錦酥馍、人聲如沸辩昆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汁针。三九已至,卻和暖如春砚尽,著一層夾襖步出監(jiān)牢的瞬間施无,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工必孤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猾骡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓敷搪,卻偏偏與公主長得像兴想,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子赡勘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容