在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ We write the integers of Now, we may draw a straight line connecting two numbers Return the maximum number of connecting lines we can draw in this way. Example 1: Input: A = [1,2,4]
Output: 2
Explanation: We can draw 2 uncrossed lines as in the diagram.
We cannot draw 3 uncrossed lines, because the line from A[1]=4 to B[2]=4 will intersect the line from A[2]=2 to B[1]=2.
Example 2: Input: A = [10,5,2,1,5,2]
Output: 3
Example 3: Input: A = [1,9,2,5,1]
Output: 2
Note:
我们在两条独立的水平线上按给定的顺序写下 现在,我们可以绘制一些连接两个数字 以这种方法绘制线条,并返回我们可以绘制的最大连线数。 示例 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 提示:
76ms
1 class Solution { 2 func maxUncrossedLines(_ A: [Int], _ B: [Int]) -> Int { 3 var dp = Array(repeating: Array(repeating: 0, count: B.count), count: A.count) 4 var res = 0 5 for row in 0 ..< A.count { 6 for col in 0 ..< B.count { 7 dp[row][col] = max(col > 0 ? dp[row][col - 1] : 0, row > 0 ? dp[row - 1][col] : 0) 8 if A[row] == B[col] { 9 dp[row][col] = max(dp[row][col], col > 0 && row > 0 ? dp[row - 1][col - 1] + 1 : 1) 10 11 res = max(res, dp[row][col]) 12 } 13 } 14 } 15 return res 16 17 } 18 } Runtime: 84 ms Memory Usage: 18.7 MB
1 class Solution { 2 func maxUncrossedLines(_ A: [Int], _ B: [Int]) -> Int { 3 let n:Int = A.count 4 let m:Int = B.count 5 var dp:[[Int]] = [[Int]](repeating:[Int](repeating: 0, count:m + 1),count:n + 1) 6 dp[0][0] = 0 7 for i in 1...n 8 { 9 for j in 1...m 10 { 11 if A[i - 1] == B[j - 1] 12 { 13 dp[i][j] = dp[i - 1][j - 1] + 1 14 } 15 else 16 { 17 dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) 18 } 19 } 20 } 21 return dp[n][m] 22 } 23 } 92ms 1 class Solution { 2 func maxUncrossedLines(_ A: [Int], _ B: [Int]) -> Int { 3 var dp = [[Int]](repeating: [Int](repeating: 0, count: B.count+1), count: A.count+1) 4 for i in 1...A.count { 5 for j in 1...B.count { 6 if A[i - 1] == B[j - 1] { 7 dp[i][j] = 1 + dp[i - 1][j - 1] 8 } else { 9 dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]) 10 } 11 } 12 } 13 return dp[A.count][B.count] 14 } 15 } 196ms 1 class Solution { 2 var dp = [[Int?]]() 3 var arrA = [Int]() 4 var arrB = [Int]() 5 func maxUncrossedLines(_ A: [Int], _ B: [Int]) -> Int { 6 arrA = A 7 arrB = B 8 dp = Array(repeating: Array(repeating: nil, count: B.count), count: A.count) 9 10 return helper(startA: 0, startB: 0) 11 } 12 13 private func helper(startA: Int, startB: Int) -> Int { 14 if let result = dp[startA][startB] { 15 return result 16 } 17 18 if startA == arrA.count - 1 && startB == arrB.count - 1 { 19 let result = arrA[startA] == arrB[startB] ? 1 : 0 20 dp[startA][startB] = result 21 return result 22 } 23 24 if startA == arrA.count - 1 || startB == arrB.count - 1{ 25 let a = arrA[startA] 26 let b = arrB[startB] 27 let result: Int 28 if a == b { 29 result = 1 30 } else if startA == arrA.count - 1 { 31 result = helper(startA: startA, startB: startB + 1) 32 } else { 33 result = helper(startA: startA + 1, startB: startB) 34 } 35 36 dp[startA][startB] = result 37 return result 38 } 39 40 let a = arrA[startA] 41 let b = arrB[startB] 42 let result: Int 43 if a == b { 44 result = helper(startA: startA + 1, startB: startB + 1) + 1 45 } else { 46 result = max( 47 helper(startA: startA + 1, startB: startB), 48 helper(startA: startA, startB: startB + 1) 49 ) 50 } 51 52 dp[startA][startB] = result 53 return result 54 } 55 }
|
请发表评论