力扣441(java&python)-排列硬币(简单)
题目:
你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。
给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。
示例 1:

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

输入:n = 8
输出:3
解释:因为第四行不完整,所以返回 3 。
提示:
1 <= n <= 2^31 - 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/arranging-coins
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
【二分查找】
1.初始化left = 1, right = n,计算出mid = left + (right - left + 1) / 2,等差数列的前n项和公式:sum = n * (n + 1) / 2(首项和公差都为1),计算出包括mid项以及之前的和;
2.循环条件:left < right:
- sum <= n 时,说明mid以及mid以后的数可能为答案,即缩小搜索区间为:[mid, right](注意这里区间的死循环哦!故mid才向上取整);
- sum > n 时,说明mid之前的数才可能为答案,即缩小搜索区间为:[left, mid-1];
3.循环结束的条件: left == right,区间缩小为一个点,故返回left 或者right都可以。
java代码:
1 class Solution {
2 public int arrangeCoins(int n) {
3 int left = 1, right = n;
4 while (left < right){
5 int mid = left + (right - left + 1) / 2;
6 long sum = (long) mid * (mid + 1) / 2;
7 //区间为:[mid, right]
8 if(sum <= n){
9 left = mid;
10 }else {
11 //区间为:[left, mid - 1]
12 right = mid - 1;
13 }
14 }
15 return left;
16 }
17 }

python3代码:
1 class Solution:
2 def arrangeCoins(self, n: int) -> int:
3 left, right = 1, n
4 while left <= right:
5 mid = left + (right - left) // 2
6 sum = mid * (mid + 1) // 2
7 if sum < n:
8 left = mid + 1
9 elif sum > n:
10 right = mid - 1
11 else:
12 return mid
13 # 循环结束,left比right大1,找小的那个
14 return right

【数学方法】:
等差数列的前n项和公式:sum = x * (x + 1) / 2(首项和公差都为1),这里需要求 x * (x + 1) / 2 < = n,求得x的最大值,解一元二次不等式:得到关于x的不等式为:


java代码为:
1 class Solution {
2 public int arrangeCoins(int n) {
3 return (int)((Math.sqrt(1 + (long)8 * n) - 1) / 2);
4 }
5 }

力扣441(java&python)-排列硬币(简单)的更多相关文章
- 力扣题解-LCP 06. 拿硬币
题目描述 桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中.我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数. 示例 1: 输入:[4,2,1] 输出:4 解释: ...
- 力扣567.字符串的排列—C语言实现
题目 来源:力扣(LeetCode)
- 441 Arranging Coins 排列硬币
你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币.给定一个数字 n,找出可形成完整阶梯行的总行数.n 是一个非负整数,并且在32位有符号整型的范围内.示例 1:n ...
- [LeetCode] 441. Arranging Coins 排列硬币
You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...
- 力扣——Next Permutation(下一个排列) python实现
题目描述: 中文: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...
- Java实现 LeetCode 441 排列硬币
441. 排列硬币 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整 ...
- Leetcode之二分法专题-441. 排列硬币(Arranging Coins)
Leetcode之二分法专题-441. 排列硬币(Arranging Coins) 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形 ...
- LeetCode(力扣)——Search in Rotated Sorted Array2 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array2 搜索旋转排序数组 中文: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0 ...
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...
- 力扣—Reorder List(重排链表)python实现
题目描述: 中文: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点 ...
随机推荐
- Swing 使用 beautyeye_lnf.jar 美化
Springboot整合Swing制作简单GUI客户端项目记录 https://blog.csdn.net/Youdmeng/article/details/106549991
- 候捷-C++面向对象高级开发
目录 笔记参考 学习目标 complex类 构造函数 常量成员函数 参数传递 函数返回值 临时对象 友元 string类 三大函数 堆.栈与内存管理 扩展补充:类模板.函数模板及其他 继承.复合.委托 ...
- linux使用hostapd+dnsmasq管理多张网卡,搭建dns服务器,并发射wifi热点(支持360wifi等等)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文发布于 2015-03-03 18:37:39 ...
- 3DCAT首届行业生态交流会|升大科技CEO邱杰:5G云渲染助力企业培训
2021年12月17日下午,由深圳市瑞云科技有限公司主办,深圳市虚拟现实产业联合会协办的 云XR如何赋能元宇宙--3DCAT实时云渲染首届行业生态合作交流会 圆满落幕 .此次活动围绕"云XR ...
- 记录--微信小程序,uniapp,H5端发送,显示emoji表情
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 小伙伴们,在开发中有没有遇到过发布帖子或者实时聊天需要发送到一些emoji表情的. 但是每当我们直接将emoji表情提交到后台的接口又会报 ...
- 北京思特奇2023年校招笔试(Java)
北京思特奇2023年校招笔试(Java) 1.表达式 (short)10/10.2*2 运算后结果是什么类型? 答案:double,浮点数默认是double,自动类型向上转换为浮点数类型 2. ser ...
- spark和hadoop的区别
hadoopHadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个分 ...
- C++一些例子
虚析构 #include<iostream> class Base { public: Base() { std::cout << "base 构造" &l ...
- #KMP,矩阵乘法#洛谷 3193 [HNOI2008]GT考试
题目 给定\(n,m,K\)和一个长度为\(m\)的数\(x\), 问有多少个\(n\)位数满足任意一段不与\(x\)完全相同,可含前导0 \(n\leq 10^9,m\leq 20\) 分析 设\( ...
- #容斥,搜索,线性筛#CF83D Numbers
洛谷 CF83D 分析 题意就是\(\sum_{i=l}^r[k|i]*[mn[\frac{i}{k}]\geq k]\) 首先线性筛每个数的最小质因数,如果\(\frac{r}{k}\)较小直接暴力 ...