1. 程式人生 > 其它 >力扣刷題筆記:441.排列硬幣(二分查詢模板題,等差數列求前n項和,程式碼很好理解)

力扣刷題筆記:441.排列硬幣(二分查詢模板題,等差數列求前n項和,程式碼很好理解)

技術標籤:刷題筆記leetcodepython

題目:

441、排列硬幣

你總共有 n 枚硬幣,你需要將它們擺成一個階梯形狀,第 k 行就必須正好有 k 枚硬幣。

給定一個數字 n,找出可形成完整階梯行的總行數。

n 是一個非負整數,並且在32位有符號整型的範圍內。

示例 1:

n = 5
硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤
因為第三行不完整,所以返回2.

示例 2:

n = 8
硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤ ¤

¤ ¤
因為第四行不完整,所以返回3.

題解思路:

將n視為等差數列的前k項和,利用二分法逼近查詢,找到n所處的k和k+1項區間,返回k即為所求。
在這裡插入圖片描述

題解python程式碼:

class Solution:
    def arrangeCoins(self, n: int) -> int:
        if n==0: return 0
        k1, k2 = 1, n
        while k1<=k2:  # 標準二分查詢寫法
            k = (k1+k2)//2
            if k+k*(k-1)//2 <=
n < k+1+k*(k+1)//2: # 等差數列前k項和 return k elif n<k+k*(k-1)//2: k2 = k-1 else: k1 = k+1

作者:a-qing-ge
連結:https://leetcode-cn.com/problems/arranging-coins/solution/er-fen-cha-zhao-mo-ban-xie-fa-by-a-qing-4y86s/
來源:力扣(LeetCode)https://leetcode-cn.com/problems/arranging-coins/