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

LeetCode 441: Arranging Coins

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

基本資料
#

難易度: easy 第一次嘗試:2022-08-24

  • 提交紀錄:Accepted → Time Limit Exceeded → Accepted

解題思路
#

排滿 k 列需要 k(k + 1) / 2 枚硬幣,隨 k 遞增,找最大的 k 讓它 <= n(Binary Search 模板二)。閉區間二分,結束時 r 是最後一個成立的。

我的嘗試
#

第一次就 AC 了;之後想練二分時寫成 while l < r 加上 l = mid,r = l + 1 時 mid 一直等於 l,無限迴圈(TLE),例如 n = 8。

正確解法
#

class Solution:
    def arrangeCoins(self, n: int) -> int:
        l, r = 0, n
        while l <= r:
            mid = (l + r) // 2
            if mid * (mid + 1) // 2 <= n:
                l = mid + 1
            else:
                r = mid - 1
        return r

複雜度
#

時間 O(log n),空間 O(1)。也可以直接用公式 isqrt(8n + 1)。

要特別避免的錯誤
#

  • while l < r 配 l = mid 時,mid 往下取整,l 可能永遠不動,無限迴圈。

面試口說整理
#

排滿 k 列要 k(k+1)/2 枚,所以我二分找最大的 k 讓它不超過 n。時間 O(log n)。

相關文章

LeetCode 268: Missing Number
·1 分鐘
LeetCode Easy Array Hash-Table Math Binary-Search
LeetCode 268 解題筆記:0 到 n 的總和減掉陣列總和就是缺的那個;缺的可能是 0
LeetCode 367: Valid Perfect Square
·1 分鐘
LeetCode Easy Math Binary-Search
LeetCode 367 解題筆記:在 [1, num] 上二分找 mid² == num,不用 sqrt
LeetCode 69: Sqrt(x)
·1 分鐘
LeetCode Easy Math Binary-Search Newtons-Method
LeetCode 69 解題筆記:找最大的 mid 讓 mid² <= x;閉區間二分結束時 r 就是答案
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上
LeetCode 492: Construct the Rectangle
·1 分鐘
LeetCode Easy Math
LeetCode 492 解題筆記:寬度從 √area 往下找,第一個能整除 area 的就是最接近正方形的寬
LeetCode 342: Power of Four
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 342 解題筆記:先確認是 2 的次方,再確認那個 1 在偶數位:n & 0x55555555 != 0,或 n % 3 == 1