力扣OJ 1035. 不相交的線

題目:

我們在兩條獨立的水平線上按給定的順序寫下 A 和 B 中的整數。

現在,我們可以繪製一些連接兩個數字 A[i] 和 B[j] 的直線,只要 A[i] == B[j],且我們繪製的直線不與任何其他連線(非水平線)相交。

以這種方法繪製線條,並返回我們可以繪製的最大連線數。

 

示例 1:

輸入:A = [1,4,2], B = [1,2,4]
輸出:2
解釋:
我們可以畫出兩條不交叉的線,如上圖所示。
我們無法畫出第三條不相交的直線,因爲從 A[1]=4 到 B[2]=4 的直線將與從 A[2]=2 到 B[1]=2 的直線相交。
示例 2:

輸入:A = [2,5,1,2,5], B = [10,5,2,1,5,2]
輸出:3
示例 3:

輸入:A = [1,3,7,1,7,5], B = [1,9,2,5,1]
輸出:2
 

提示:

1 <= A.length <= 500
1 <= B.length <= 500
1 <= A[i], B[i] <= 2000

 

代碼:

class Solution {
public:    
    int ans[505][505];
    Solution()
    {
        memset(ans,-1,sizeof(ans));
    }
    int maxUncrossedLines(vector<int>& A, vector<int>& B) {
        return maxUncrossedLines(A,B,A.size()-1,B.size()-1);
    }
    int maxUncrossedLines(vector<int>& A, vector<int>& B,int ka,int kb) {
        if(ka<0||kb<0)return 0;
        if(ans[ka][kb]>=0)return ans[ka][kb];
        if(A[ka]==B[kb])return ans[ka][kb]=maxUncrossedLines(A,B,ka-1,kb-1)+1;
        return ans[ka][kb]=max(maxUncrossedLines(A,B,ka,kb-1),maxUncrossedLines(A,B,ka-1,kb));
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章