【每日一题】441. 排列硬币

441. 排列硬币 - 力扣(LeetCode)

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

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

示例 1:

复制代码
输入:n = 5
输出:2
解释:因为第三行不完整,所以返回 2 。

示例 2:

复制代码
输入:n = 8
输出:3
解释:因为第四行不完整,所以返回 3 。

提示:

  • 1 <= n <= 231 - 1
java 复制代码
class Solution {
    public int arrangeCoins(int n) {
        long count = 0;
        long tmp = 0;
        for(int i = 0;;i++) {
            count+=1;
            tmp+=count;
            if(tmp > n) return i; 
        }
    }
}

每日一题,今天是简单题。

今天这道题就是求n个数,每次阶梯式放,可以放几个完整的阶梯。实际上就是等差数列的处理。博主这里是直接进行模拟了,一次次去处理,用count记录需要该阶梯放的个数。i是次数。如果有一次大于n了就说明放不下了,这时候的i就是答案。

题解也给出了数学解法和二分的解法。

数学解法就是去解二元一次方程组,会解出两个解来,就可以直接使用数学的公式算出答案来返回。

二分解法用到了等差数列的求和公式。阶梯数一定会小于n(因为越放需要越多的个数),所以在1,n之间查找,如果该数带入等差数列的结果是小于等于,就让left = mid,大于就让right=mid-1。其实这里是一个边界的处理问题,这样写找到时left会是小于等于答案的位置。如果让left=mid+1,而right = mid的话,那么循环完,left就是答案的前一个位置。

这是博主做完的结果:

相关推荐
CheerWWW1 分钟前
深入理解计算机系统——位运算、树状数组
笔记·学习·算法·计算机系统
DevOpenClub3 分钟前
全国三甲医院主体信息 API 接口
java·大数据·数据库
言慢行善11 分钟前
SpringBoot中的注解介绍
java·spring boot·后端
一勺菠萝丶13 分钟前
管理后台使用手册在线预览与首次登录引导弹窗实现
java·前端·数据库
feng_you_ying_li14 分钟前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++
无巧不成书021826 分钟前
Java包(package)全解:从定义、使用到避坑,新手零基础入门到实战
java·开发语言·package·java包
身如柳絮随风扬37 分钟前
SpringMVC 异常处理?Spring 父子容器?
java·spring·mvc
锅挤38 分钟前
数据结构复习(第一章):绪论
数据结构·算法
skywalker_1138 分钟前
力扣hot100-5(盛最多水的容器),6(三数之和)
算法·leetcode·职场和发展
汀、人工智能42 分钟前
[特殊字符] 第95课:冗余连接
数据结构·算法·链表·数据库架构··冗余连接