↓快轉到主要內容
  1. LeetCode/

LeetCode 3648: Minimum Sensors to Cover Grid

·1 分鐘· ·
LeetCode Medium Math
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2025-08-16

  • 提交紀錄:Wrong Answer → Accepted

解題思路
#

切比雪夫距離 <= k 的範圍是一個邊長 2k + 1 的正方形。兩個方向互相獨立:

  • 列的方向需要 ceil(n / (2k + 1)) 個。
  • 行的方向需要 ceil(m / (2k + 1)) 個。

答案是兩者相乘。

我的嘗試
#

第一版寫成 n // (2k + 1) + 1,剛好整除時多了 1。例如 n = 9、m = 3、k = 0:每個感測器只蓋自己,答案是 27,這版算出 10 × 4 = 40。改成判斷有沒有整除才加 1 就 AC 了。

正確解法
#

class Solution:
    def minSensors(self, n: int, m: int, k: int) -> int:
        side = 2 * k + 1
        return -(-n // side) * -(-m // side)       # 無條件進位的除法

複雜度
#

時間 O(1),空間 O(1)。

要特別避免的錯誤
#

  • 無條件進位寫成 a // b + 1:整除時多 1。用 -(-a // b) 或 (a + b - 1) // b。
  • 用浮點數 a / b == a // b 判斷整除:大數時可能有誤差。

面試口說整理
#

每個感測器蓋一個邊長 2k + 1 的正方形,列和行的方向互相獨立,各自需要 n 和 m 除以邊長再無條件進位,兩個相乘就是答案。時間 O(1)。

相關文章

LeetCode 3627: Maximum Median Sum of Subsequences of Size 3
·1 分鐘
LeetCode Medium Math Greedy Sorting Game-Theory Array
LeetCode 3627 解題筆記:排序後每次拿最大的兩個和最小的一個,中位數是第二大的;答案是從尾端往前每隔一個取,共 n / 3 個
LeetCode 1814: Count Nice Pairs in an Array
·1 分鐘
LeetCode Medium Array Hash-Table Math Counting
LeetCode 1814 解題筆記:把條件移項成 nums[i] - rev(nums[i]) == nums[j] - rev(nums[j]),按這個值分組數 pair,記得取模
LeetCode 313: Super Ugly Number
·1 分鐘
LeetCode Medium Array Math Dynamic-Programming
LeetCode 313 解題筆記:LC 264 的推廣,每個質數一個指針;用 heap 的話要避免同一個數被推進去很多次
LeetCode 396: Rotate Function
·1 分鐘
LeetCode Medium Array Math Dynamic-Programming
LeetCode 396 解題筆記:F(k) 和 F(k - 1) 只差一個公式:F(k) = F(k - 1) + sum - n × 被移到最前面的那個數
LeetCode 264: Ugly Number II
·1 分鐘
LeetCode Medium Hash-Table Math Dynamic-Programming Heap-Priority-Queue
LeetCode 264 解題筆記:三個指針分別指向下一個要乘 2、3、5 的醜數,每次取最小的,相等的指針都要前進
LeetCode 50: Pow(x, n)
·1 分鐘
LeetCode Medium Math Recursion
LeetCode 50 解題筆記:快速冪,x^n = (x²)^(n/2),n 是奇數時多乘一個 x;n 是負數時算 1 / x^(-n)