LeetCode——441. 排列硬币(Java)
2021/10/10 17:17:45
本文主要是介绍LeetCode——441. 排列硬币(Java),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目描述
题干: 你总共有 n 枚硬币,并计划将它们按阶梯状排列 对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币 阶梯的最后一行 可能 是不完整的。 给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。 示例 1: 输入:n = 5 输出:2 解释:因为第三行不完整,所以返回 2 。 示例 2: 输入:n = 8 输出:3 解释:因为第四行不完整,所以返回 3 。
题解思路
返回硬币可以完整填满的阶梯数,看到阶梯首先想到的就是类似杨辉三角形采用遍历 记录每层的数量和之前的数目和,显然这种暴力模型会超时,再优化想到二分的方法 因为按照台阶来排列,n/2就是它的高度,但是完整的长度还是得按照等差数列公式 如果我们解这个公式还可以用解直接返回答案,这就是数学的魅力
正确代码
public int arrangeCoins(int n) { int left = 1, right = n; while (left < right) { int mid = left + (right - left) / 2; if ((long) mid * (mid + 1) <= (long) 2 * n) { left = mid; } else { right = mid; } } return left; } public int arrangeCoins1(int n) { return (int) ((Math.sqrt((long) 8 * n + 1) - 1) / 2); }
总结
数学模型的建立都伴随着总结的公式出现,所以以后遇到要先思考模型的规律 如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见
这篇关于LeetCode——441. 排列硬币(Java)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?