前往
大廳
主題

LeetCode - 1035. Uncrossed Lines 解題心得

Not In My Back Yard | 2024-03-07 12:00:17 | 巴幣 0 | 人氣 31

題目連結:


題目意譯:
你被給定兩個整數陣列 nums1 和 nums2。我們在兩條分別的水平線上寫下 nums1 和 nums1 中的整數(按照它們給定的順序)。

我們可以劃一些連接線。其中每一條為連接兩數字 nums1[i] 和 nums2[j] 的直線,使得:
    nums1[i] == nums2[j],且
    我們劃的線不與其他連接線(即不是水平線的其他線)交錯。

注意到連接線就算是在端點上也不得交錯(即每一個數字只能屬於一條連接線上)。

回傳我們根據上述規則最多能劃出來的連接線之數量。

限制:
1 ≦ nums1.length, nums2.length ≦ 500
1 ≦ nums1[i], nums2[j] ≦ 2000



範例測資:
範例 1:
輸入: nums1 = [1,4,2], nums2 = [1,2,4]
輸出: 2
解釋: 我們可以劃出 2 條彼此不交錯的線,如上圖。
我們無法劃出 3 條彼此不交錯的線,因為 nums1[1] = 4 連到 num2[2] = 1 的線將會與 nums1[2] = 2 到 nums2[1] = 2 的線交錯。

範例 2:
輸入: nums1 = [2,5,1,2,5], nums2 = [10,5,2,1,5,2]
輸出: 3

範例 3:
輸入: nums1 = [1,3,7,1,7,5], nums2 = [1,9,2,5,1]
輸出: 2


解題思維:
可以看到題目定義的連接線等價於 nums1 和 nums2 的共同子序列(第一個條件代表著「共同」、第二個條件為「子序列」)。

因此題目實際上等價於是在求最長共同子序列(Longest Common Subsequence,LCS)之長度,解法參見這題




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作