★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: http://www.javashuo.com/article/p-zqodvlud-me.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Two images A
and B
are given, represented as binary, square matrices of the same size. (A binary matrix has only 0s and 1s as values.)git
We translate one image however we choose (sliding it left, right, up, or down any number of units), and place it on top of the other image. After, the overlap of this translation is the number of positions that have a 1 in both images.github
(Note also that a translation does not include any kind of rotation.)微信
What is the largest possible overlap?app
Example 1:ide
Input: A = [[1,1,0], [0,1,0], [0,1,0]] B = [[0,0,0], [0,1,1], [0,0,1]] Output: 3 Explanation: We slide A to right by 1 unit and down by 1 unit.
Notes: this
1 <= A.length = A[0].length = B.length = B[0].length <= 30
0 <= A[i][j], B[i][j] <= 1
給出兩個圖像 A
和 B
,A
和 B
爲大小相同的二維正方形矩陣。(而且爲二進制矩陣,只包含0和1)。spa
咱們轉換其中一個圖像,向左,右,上,或下滑動任何數量的單位,並把它放在另外一個圖像的上面。以後,該轉換的重疊是指兩個圖像都具備 1 的位置的數目。code
(請注意,轉換不包括向任何方向旋轉。)htm
最大可能的重疊是什麼?
示例 1:
輸入:A = [[1,1,0], [0,1,0], [0,1,0]] B = [[0,0,0], [0,1,1], [0,0,1]] 輸出:3 解釋: 將 A 向右移動一個單位,而後向下移動一個單位。
注意:
1 <= A.length = A[0].length = B.length = B[0].length <= 30
0 <= A[i][j], B[i][j] <= 1
288ms
1 class Solution { 2 func largestOverlap(_ A: [[Int]], _ B: [[Int]]) -> Int { 3 var LA = [Int](), LB = [Int]() 4 let N = A.count 5 var count = [Int: Int]() 6 for i in 0..<N*N { 7 if A[i/N][i%N] == 1 { 8 LA.append( i/N * 100 + i % N) 9 } 10 if B[i/N][i%N] == 1 { 11 LB.append( i/N * 100 + i % N) 12 } 13 } 14 15 for i in LA { 16 for j in LB { 17 count[i-j, default: 0] += 1 18 } 19 } 20 21 var res = 0 22 for (k, v) in count { 23 res = max(res, v) 24 } 25 return res 26 } 27 }
1 class Solution { 2 func largestOverlap(_ A: [[Int]], _ B: [[Int]]) -> Int { 3 var res:Int = 0 4 var n:Int = A.count 5 var listA:[Int] = [Int]() 6 var listB:[Int] = [Int]() 7 var diffCnt:[Int:Int] = [Int:Int]() 8 for i in 0..<(n * n) 9 { 10 if A[i / n][i % n] == 1 11 { 12 listA.append(i / n * 100 + i % n) 13 } 14 if B[i / n][i % n] == 1 15 { 16 listB.append(i / n * 100 + i % n) 17 } 18 } 19 for a in listA 20 { 21 for b in listB 22 { 23 diffCnt[a - b,default:0] += 1 24 } 25 } 26 for diff in diffCnt 27 { 28 res = max(res, diff.value) 29 } 30 return res 31 } 32 }