快轉到主要內容
  1. LeetCode/

LeetCode 1497: Check If Array Pairs Are Divisible by k

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

基本資料
#

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

  • 總花費時間:00:00.00

解題思路
#

num % k 的餘數作為分類,使用雜湊表統計每個餘數的出現次數。餘數 r 應與其互補餘數 k − r 成對。需特別處理兩個情況:r = 0,以及(當 k 為偶數時)r = k/2,這兩者都必須是偶數次才能完全成對。

解法
#

  • 對每個元素計算 num % k,並在雜湊表中記錄餘數計數。
  • 對於每個餘數 r,檢查 count[r] == count[k - r]
  • 特殊情況:
    • 餘數 0 的計數必須為偶數。
    • 若 k 為偶數,餘數 k/2 的計數也必須為偶數。
class Solution:
    def canArrange(self, arr: List[int], k: int) -> bool:
        remains = defaultdict(int)

        for num in arr:
            if num % k:
                remains[num % k] += 1

        for remain_num, count in remains.items():
            if k - remain_num == remain_num and remains[k - remain_num] % 2:
                return False

            elif remains[k - remain_num] != remains[remain_num]:
                return False

        return True

複雜度
#

  • 時間:O(n)
  • 空間:O(k)

收穫
#

  • 關鍵概念是餘數與互補餘數的成對關係:r 對 k − r。
  • Python 的 % 回傳非負餘數,負數也能被自然處理。
  • 常見錯誤:忽略處理餘數 0 與(當 k 為偶數時)餘數 k/2。

遇到的問題
#

  • 邊界情況需明確處理:
    • 能被 k 整除的數(餘數 0)必須成雙出現,才能互相配對。
    • 當 k 為偶數時,餘數 k/2 也必須成雙;否則僅檢查 count[k/2] == count[k - k/2] 可能誤判(例如 k = 4 且有三個 2)。

相關文章

LeetCode 1695: Maximum Erasure Value (Sliding Window)
·1 分鐘
LeetCode Daily Medium Sliding Window Two Pointers Array Hashset
LeetCode 解題紀錄
LeetCode 209: Minimum Size Subarray Sum
·1 分鐘
LeetCode Daily Medium Array Sliding Window Two Pointers Prefix Sum Binary-Search
滑動視窗與雙指針,最小化子陣列長度(總和 ≥ target)。
LeetCode 3439: Reschedule Meetings for Maximum Free Time (Sliding Window)
·2 分鐘
LeetCode Daily Medium Sliding Window Two Pointers Intervals Array
LeetCode 解題紀錄
LeetCode 496: Next Greater Element I
·1 分鐘
LeetCode Daily Easy Array Stack Monotonic-Stack Hash Map Next Greater Element
單調遞減堆疊處理 nums2,預先建立下一個更大元素對照表,回答 nums1 查詢。
LeetCode 503: Next Greater Element II(單調棧)
·1 分鐘
LeetCode Daily Medium Monotonic-Stack Stack Array Circular-Array 單調棧 環狀陣列
單調棧、環狀陣列
LeetCode 904: Fruit Into Baskets
·1 分鐘
LeetCode Daily Medium Sliding Window Hash Map Two Pointers Variable Window
LeetCode 解題紀錄 - 可變大小滑動窗口與雜湊表