查詢兩個陣列的最大公共子陣列,要求返回的子陣列是連續的。
輸入: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,這剛好是異或計算 對於進製,正好是按位與 左移一位之後的結果 在將兩者進行異或,之後再計算進製,直到沒有進製,完成運算,同樣有兩種實現...