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

LeetCode 1103: Distribute Candies to People

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

基本資料
#

難易度: easy 第一次嘗試:2022-10-18

  • 提交紀錄:Wrong Answer ×3 → Accepted ×3

解題思路
#

直接模擬:第 i 次(從 0 開始)給第 i % n 個人 min(i + 1, 剩下的) 顆。總共只會發 O(√candies) 次,因為 1 + 2 + ... + k ≈ k² / 2。

我的嘗試
#

前三版先把 gave += 1、再扣 candies -= gave,扣的是下一次的數量,每次都多扣一顆:candies = 3、一個人時答案 [3],回傳 [2]。把兩行對調就 AC 了。

正確解法
#

class Solution:
    def distributeCandies(self, candies: int, num_people: int) -> List[int]:
        res = [0] * num_people
        i = 0
        while candies > 0:
            give = min(i + 1, candies)
            res[i % num_people] += give
            candies -= give
            i += 1
        return res

複雜度
#

時間 O(√candies + n),空間 O(n)。

要特別避免的錯誤
#

  • 先扣掉這次發的數量,再把下次要發的數量加一;順序反了會多扣。

面試口說整理
#

我直接模擬,第 i 次發 i + 1 顆給第 i mod n 個人,剩下的不夠就全部給他。總共只會發根號 candies 次左右。

相關文章

LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上
LeetCode 412: Fizz Buzz
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 412 解題筆記:先判斷 15 的倍數,再判斷 5 和 3;倍數要用 %,不是 //
LeetCode 258: Add Digits
·1 分鐘
LeetCode Easy Math Simulation Number-Theory
LeetCode 258 解題筆記:反覆把位數相加直到剩一位;O(1) 解法是 digital root:1 + (n - 1) % 9
LeetCode 67: Add Binary
·1 分鐘
LeetCode Easy Math String Bit-Manipulation Simulation
LeetCode 67 解題筆記:從兩個字串的尾巴往前逐位相加,進位是 sum // 2,這一位是 sum % 2
LeetCode 1137: N-th Tribonacci Number
·1 分鐘
LeetCode Easy Math Dynamic-Programming Memoization
LeetCode 1137 解題筆記:跟 Fibonacci 一樣,用三個變數滾動;小心 T0 = 0、T1 = T2 = 1 的起始值和迴圈範圍
LeetCode 1030: Matrix Cells in Distance Order
·1 分鐘
LeetCode Easy Array Math Geometry Sorting
LeetCode 1030 解題筆記:列出所有座標,按到中心的曼哈頓距離排序;回傳的是座標,不是距離