Leetcode之二分法专题-441. 排列硬币(Arranging Coins)


你总共有 枚硬币,你需要将它们摆成一个阶梯形状,第 行就必须正好有 枚硬币。

给定一个数字 n,找出可形成完整阶梯行的总行数。

是一个非负整数,并且在32位有符号整型的范围内。

示例 1:

n = 5

硬币可排列成以下几行:
¤
¤ ¤
¤ ¤ 因为第三行不完整,所以返回2.

示例 2:

n = 8

硬币可排列成以下几行:
¤
¤ ¤
¤ ¤ ¤
¤ ¤ 因为第四行不完整,所以返回3.

读题,问题可以转化为:求最后一列完整的行数。
首先第一步,根据等差数列公式Sn=(a1+an)*n/2,a1=1,an=a1+(n-1),得到Sn*2=(1+n)*n
在我们后续的式子中,用n代替Sn,用mid代替n 那么我们可以写出二分规则:
如果mid*(mid+1)>2*n的话,证明第mid行是不够数量的,所以不需要保留,R = mid - 1
否则,第mid行可能够也可能小于,所以我们保留,并取右边,L = mid
class Solution {
public int arrangeCoins(int n) {
int L = 0;
int R = n;
while(L<R){
int mid = (L+R+1)>>>1;
if((long)(Math.pow(mid, 2)+mid)>(long)2*n){
R = mid-1;
}else{
L = mid;
}
}
return L;
}
}

最新文章

  1. linux 下shell中if的“-e,-d,-f”是什么意思
  2. h5直播开发之旅总结
  3. 改变Vim在iTerm2中的光标
  4. Java容器类概述
  5. Ubuntu系统下MySQL读取文件数据ERROR解决
  6. 实现自己的cp命令
  7. SQL SERVER 内存分配及常见内存问题(2)——DMV查询
  8. SharePoint 入门书籍推荐 转载来源http://www.cnblogs.com/jianyus/p/3513238.html
  9. 一个使用openGL渲染的炫丽Android动画库
  10. idea web项目动态部署
  11. 非一屏页面,出现遮罩层页面位置不动,并且遮罩层一屏显示。(pc,移动端都适用的方法)
  12. MySQL系列:高可用架构之MHA
  13. js基础梳理-内存空间
  14. Linux服务器安装部署redis
  15. c# 静态构造函数与私有构造函数共存
  16. 行为类模式(六):备忘录(Memento)
  17. 关于session销毁的问题,invalidate() 和removeAttribute()
  18. nomad 集群搭建
  19. pro1
  20. bash切割文件

热门文章

  1. 【git】15分钟学会使用Git和远程代码库
  2. python课堂整理2
  3. IO流总结2
  4. 算法与数据结构基础 - 哈希表(Hash Table)
  5. ssm 搭建项目各项配置
  6. 对比度拉伸(一些基本的灰度变换函数)基本原理及Python实现
  7. 【作品】超实用C++分数类
  8. Java高级面试题解析(二):百度Java面试题前200页(精选)
  9. Storm初识(1)
  10. JavaWeb——JSP开发1