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

LeetCode 1018: Binary Prefix Divisible By 5

·1 分鐘· ·
LeetCode Easy Array Bit-Manipulation
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-09-27

  • 提交紀錄:Runtime Error → Time Limit Exceeded ×2 → Accepted ×4

解題思路
#

前綴多讀一位時,數值變成 2x + bit(Bit Manipulation,左移一位再加上新的位元)。只關心是否被 5 整除,所以每一步都 % 5,數字永遠小於 5。每次重新把前綴轉成整數是 O(n²),而且數字會有上萬位。

我的嘗試
#

第一版把整數 list 直接 join(TypeError);修好之後每個前綴都重新轉成整數,O(n²) 而且數字越來越大,TLE 了兩次。改成每一步只保留餘數才 AC。

正確解法
#

class Solution:
    def prefixesDivBy5(self, nums: List[int]) -> List[bool]:
        res, x = [], 0
        for bit in nums:
            x = (x * 2 + bit) % 5
            res.append(x == 0)
        return res

複雜度
#

時間 O(n),空間 O(1)(不算輸出)。

要特別避免的錯誤
#

  • 每一步取餘數,(2x + b) mod 5 只跟 x mod 5 有關。
  • 每次重新轉換前綴是 O(n²),會 TLE。

面試口說整理
#

前綴每多一位,值就變成兩倍加上新的位元,而我只在乎除以 5 的餘數,所以每一步都只保留餘數,數字不會變大。時間 O(n)。

相關文章

LeetCode 832: Flipping an Image
·1 分鐘
LeetCode Easy Array Two-Pointers Bit-Manipulation Matrix
LeetCode 832 解題筆記:每一列先左右反轉再把 0、1 互換;可以用左右指針同時做
LeetCode 645: Set Mismatch
·1 分鐘
LeetCode Easy Array Hash-Table Bit-Manipulation Sorting
LeetCode 645 解題筆記:用總和算:missing = 1..n 的和 - set 的和,duplicate = 陣列總和 - set 的和
LeetCode 136: Single Number
·1 分鐘
LeetCode Easy Array Bit-Manipulation
LeetCode 136 解題筆記:x ^ x = 0、x ^ 0 = x,把所有數 XOR 起來,出現兩次的互相抵消,剩下的就是答案
LeetCode 1002: Find Common Characters
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 1002 解題筆記:每個單字各自計數,對所有 Counter 取交集(每個字元取最小次數),再展開
LeetCode 1005: Maximize Sum Of Array After K Negations
·1 分鐘
LeetCode Easy Array Greedy Sorting
LeetCode 1005 解題筆記:每次把最小的數變號;最小的已經是正數時,剩下的次數只要看奇偶
LeetCode 1013: Partition Array Into Three Parts With Equal Sum
·1 分鐘
LeetCode Easy Array Greedy
LeetCode 1013 解題筆記:總和要能被 3 整除,從左邊累加,每湊到 total / 3 就切一刀,切出至少 3 段就成立