【lc】441. 排列硬币

发布时间 2023-08-29 09:52:04作者: BJFU-VTH

链接

https://leetcode.cn/problems/arranging-coins/description/

问题分析

这题看数据规模,遍历肯定搞不定。

看数据规律,我们优先考虑二分。

然后单拎出来一个函数用来计算求和即可。

其中,二分如果不好判断边界,就假定极限情况(来到了left == right的情况),看看最后你要的值是left还是right,直接返回即可。

代码

class Solution:
    def arrangeCoins(self, n: int) -> int:
        if n < 2:
            return n
        left, right = 1, n
        while left <= right:
            mid = (left + right) >> 1
            if self.cal(mid) < n:
                left = mid + 1
            elif self.cal(mid) == n:
                return mid
            else:
                right = mid - 1
        return right

    def cal(self, n):
        return (1 + n) * n // 2