力扣-441. 排列硬币

发布时间 2023-04-02 14:13:12作者: TimeNoMuch

你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。

给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。

应该首先判断数据源是否是有序的,先二分。

var rs = ArrangeCoins(1804289383);

static int ArrangeCoins(int n) {
        if(n <= 0) return 0;
        // 二分
        long l = 1,r = n,mid = 0,rst = 0;
        while(l <= r)
        {
            mid = l + (r-l)/2;
            Console.WriteLine((1 + mid)*mid/2);
            if((1 + mid)*mid/2 <= n)
            {
                // 取小于的
                rst = mid;
                l = mid + 1;
            }else
            {
                r = mid - 1;
            } 
        }
        return (int)rst;  
    }