zoukankan      html  css  js  c++  java
  • 0441. Arranging Coins (E)

    Arranging Coins (E)

    题目

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must have exactly k coins.

    Given n, find the total number of full staircase rows that can be formed.

    n is a non-negative integer and fits within the range of a 32-bit signed integer.

    Example 1:

    n = 5
    
    The coins can form the following rows:
    ¤
    ¤ ¤
    ¤ ¤
    
    Because the 3rd row is incomplete, we return 2.
    

    Example 2:

    n = 8
    
    The coins can form the following rows:
    ¤
    ¤ ¤
    ¤ ¤ ¤
    ¤ ¤
    
    Because the 4th row is incomplete, we return 3.
    

    题意

    将n个硬币叠成阶梯状,求能达到的最大阶梯数。

    思路

    可以直接累减,或者二分查找,或者直接公式解答 (从 (frac{k*(k+1)}{2} le n) 推导)。


    代码实现

    Java

    累减

    class Solution {
        public int arrangeCoins(int n) {
            int i = 1;
            while (n >= i) {
                n -= i++;
            }
            return i - 1;
        }
    }
    

    二分

    class Solution {
        public int arrangeCoins(int n) {
            long left = 0, right = n;
            while (left <= right) {
                long mid = (right - left) / 2 + left;
                long sum = (mid + 1) * mid / 2;
                if (sum < n) {
                    left = mid + 1;
                } else if (sum > n) {
                    right = mid - 1;
                } else {
                    return (int) mid;
                }
            }
            return (int) right;
        }
    }
    

    公式计算

    class Solution {
        public int arrangeCoins(int n) {
            return (int) (Math.sqrt(2 * (long) n + 0.25) - 0.5);
        }
    }
    
  • 相关阅读:
    在CentOS7上搭建MySQL主从复制与读写分离
    数据库 引擎
    数据库 事务
    数据库 索引
    MYSQL
    基于mysqld_multi实现MySQL 5.7.24多实例多进程配置
    09 引导过程与故障修复
    chapter 8.3
    作业 8.1
    Chapter 04 作业
  • 原文地址:https://www.cnblogs.com/mapoos/p/13222628.html
Copyright © 2011-2022 走看看