718 求兩個陣列中公共的 長度最長的子陣列的長度

2021-10-07 16:42:42 字數 1554 閱讀 8379

時間複雜度: o(n×m)。

空間複雜度: o(n×m)。

n 表示陣列 a 的長度,m 表示陣列 b 的長度。

空間複雜度還可以再優化,利用滾動陣列可以優化到 o(min(n,m))。

**實現:

陣列a=[1,2,3,2,1]

陣列b=[3,2,1,4,7]

public

intfindlength

(int

a,int[

]b)}

return ans;

}

**執行流程分析及結果圖:

最長的公共子陣列就是上面紅色所對應的[3,2,1],長度是3。

時間複雜度:o((n+m)×min(n,m))。

空間複雜度:o(1)。

n 表示陣列 a 的長度,m 表示陣列 b 的長度。

**實現:

public

intfindlength2

(int

a,int[

] b)

//視窗向左滑動

for(

int i =

0; i < m; i++

)return ret;

}//求每次滑動視窗後最長的公共子陣列長度

public

intmaxlength

(int

a,int[

] b,

int adda,

int addb,

int len)

else

ret = math.

max(ret, k)

; system.out.

println

(i+" "

+ret);}

return ret;

}

**執行流程分析及結果圖:

最長的公共子陣列就是上面紅色所對應的[3,2,1],長度是3。是在第乙個for迴圈是i=3,len=2,的時候取得。

其實兩種方法的本質是一樣的,滑動視窗法相當於用時間複雜度換得動態規劃法的空間複雜度。看做滑動視窗法容易理解一些,如兩個陣列a、b,都相當於移動陣列b,使得b陣列的起始位置對應第a陣列的不同位置,然後求得兩個陣列公共部分的最長相同子陣列的長度,依次類推,求出每個起始位置對應的相同子陣列長度,然後取最大值即可。

求兩個陣列的交集 最長公共字首

解 兩個指標比較是否相等即可 class solution return ans 如果給定陣列已經排好序,優化版 1,設定兩個指標,比較兩個指標指向元素,相同元素放進空白陣列 2 不同元素,將指標指向小的元素後移 3,重複以上步驟,知道任意乙個陣列終止 class solution return a...

求兩個陣列的交集

問題 給你兩個排序的陣列,求兩個陣列的交集。比如 a 1 3 4 5 7,b 2 3 5 8 9,那麼交集就是 3 5.思路 1.每一次從b陣列中取一值,然後在a陣列裡逐個比較,如果有相等的,則儲存。該演算法複雜度為 o mn m,n 分別為陣列 a b 的長度。2.因為a b 都排過序,所以,每一...

求兩個陣列的交集

方法 先用a建立 有序二叉樹,然後用b中的數值依次在二叉樹中尋找,如果找到了,就增加到交集陣列中 複雜度 建立二叉樹的複雜度logn,在二叉樹中查詢的複雜度是 logn m 1 include stdio.h int commonarray 20 int com len 0 struct node ...