【Leetcode】python - [835] Image Overlap 個人解法筆記

整理 LeetCode #835 的個人解法筆記:解題思路、Time/Space Complexity 與邊界條件。

題目出處

835. Image Overlap

難度

medium

題目分類

Array, Matrix

2026-09-27 一刷

個人範例程式碼 - 一刷 (2026/09/27)

class Solution:
    def largestOverlap(self, img1: list[list[int]], img2: list[list[int]]) -> int:
        img1_list = []
        img2_list = []

        # n^2
        for i in range(len(img1)):
            for j in range(len(img1[0])):
                if img1[i][j] == 1:
                    img1_list.append((i, j))
        
        # n^2
        for i in range(len(img2)):
            for j in range(len(img2[0])):
                if img2[i][j] == 1:
                    img2_list.append((i, j))
    
        # K1 * K2 (worse = all 1, N^4)
        deltas = {}
        max_delta = 0
        for (i1, j1) in img1_list:
            for (i2, j2) in img2_list:
                deltas[(i2-i1, j2-j1)] = deltas.get((i2-i1, j2-j1), 0) + 1
                if deltas[(i2-i1, j2-j1)] > max_delta:
                    max_delta = max(max_delta, deltas[(i2-i1, j2-j1)])

        return 0 if max_delta == 0 else max_delta

算法說明

主要解題思維如下:

  1. 先對矩陣降維,排除所有 0 的資訊,只需要專注處理 1 就好。
    具體方式為存所有 1 的座標。
  2. 比較所有的座標並統計,shift 最大值就是最大重疊值(照這組移動會有最大重疊,重疊數量就是統計數量)。

註:如果直接暴力法,比對兩矩陣 (可能在左右上下之類的),那就是必定 O(n^4),會 TLE,因此需要先降維。

Time Complexity

O(n^2+K1K2)

n^2 掃兩個矩陣

K1K2 對應的是 1 的數量 (worst 就是全 1,為 n^4)

Space Complexity

O(n^2) # 存座標列表 + delta 統計

Licensed under CC BY-NC-SA 4.0
最後更新 Sep 27, 2026
使用 Hugo 建立
主題 Stack 由 Jimmy 設計