面試題記 查詢兩個陣列的最大公共子陣列

2021-10-08 02:54:00 字數 1124 閱讀 9189

查詢兩個陣列的最大公共子陣列,要求返回的子陣列是連續的。

輸入:a = [3,1,3,2,1,4], b = [3,2,3,2,1,4]

輸出:[3,2,1,4]

輸入:a = [3,1,3,2,1,4], b = [3,2,3,1]

輸出:[3,2][3,1]

動態規劃,同兩個字串的編輯距離、最長公共子串行lcs 解法一樣。

#include

#include

#include

using

namespace std;

vector<

int>

getlongestsubvector

(vector<

int> vec1, vector<

int> vec2)

}else}}

return max_len ==-1

? vector<

int>()

: vector<

int>

(vec1.

begin()

+ max_i - max_len, vec1.

begin()

+ max_i);}

intmain()

; vector<

int> vec2 =

; vector<

int> res =

getlongestsubvector

(vec1, vec2)

;for

(int i =

0; i < res.

size()

; i++

) cout << res[i];}

cout << endl;

cout <<

"hello, world!"

<< endl;

return0;

}

時間複雜度:o(mn),二維動態規劃,m是 a 陣列長度,n 是 b 陣列長度;

空間複雜度:o(mn),建立了乙個(m+1)✖️(n+1) 的 dp 陣列。

leetcode面試試題 兩個陣列的交集

leetcode面試題 前言 一 題目描述 二 解決方法 總結leetcode 練習 題目 給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 9,4 方法...

給定兩個數,求這兩個數的最大公約數

第一次嘗試 include void math gys int a,int b else for int i t i a i b i int main 此 我的做法不夠好,這是一種暴力窮舉法,雖然能解決問題,但是不夠好,仍需進行優化。第二次嘗試 define crt secure no warnin...

面試題 實現兩個數的和,不能用「 」「 」

這道題目和之前leetcode中的二進位制加法很相似。由於無法使用運算子,我們可以改用對位的操作。如果不考慮進製的話 1 1 0,1 0 1,0 1 1,0 0 0,這剛好是異或計算 對於進製,正好是按位與 左移一位之後的結果 在將兩者進行異或,之後再計算進製,直到沒有進製,完成運算,同樣有兩種實現...