[Swift]LeetCode835. 圖像重疊 | Image Overlap

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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. 1 <= A.length = A[0].length = B.length = B[0].length <= 30
  2. 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. 1 <= A.length = A[0].length = B.length = B[0].length <= 30
  2. 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 }

Runtime: 292 ms
Memory Usage: 19.3 MB
 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 }
相關文章
相關標籤/搜索