Fork me on GitHub

Leetcode441Arranging Coins排列硬币

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

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

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

示例 1:

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

示例 2:

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

 

暴力法超时

所以用二分法

 

class Solution {
public:
	int arrangeCoins(int n)
	{
		if (n == 0)
			return 0;
		long long low = 1;
		long long high = n;
		while (low <= high)
		{
			long long mid = (low + high) / 2;
			long long temp = (1 + mid) * mid / 2;
			if (temp > n)
			{
				high = mid - 1;
			}
			else
			{
				low = mid + 1;
			}
		}
		return high;
	}
};

 

posted @ 2018-10-24 22:35  lMonster81  阅读(113)  评论(0编辑  收藏  举报
/*评论*/ /*top按钮*/

/* 网易云控件 */