254. 丢鸡蛋
楼有n
层高,鸡蛋若从k层或以上扔,就会碎。从k层以下扔,就不会碎。
现在给两个鸡蛋,用最少的扔的次数找到k。返回最坏情况下次数。
样例
给出 n = 10
, 返回 4
.
给出 n = 100
, 返回14
.
说明
对于n=10, 一种找k的初级方法是从1、2...k层不断找。但最坏情况下要扔10次。
注意有两个鸡蛋可以使用,所以可以从4、7、9层扔。这样最坏就只需要4次(例如k=6时)。
这题观察的规律是1+2+...+k >= n时返回k。
有两个鸡蛋时,一颗鸡蛋确定上限,一颗鸡蛋从上一次不碎开始从下往上试。
class Solution {
public:
/**
* @param n: An integer
* @return: The sum of a and b
*/
long dropEggs(int n) {
// write your code here
long times = 1;
long long res =0;
while(res < n)
{
res+=times;
times+=1;
}
return times-1;
}
};
通过率89,大数就TLE;
用等差数列就AC了。。。
class Solution {
public:
/**
* @param n: An integer
* @return: The sum of a and b
*/
long dropEggs(int floors) {
if(floors == 0 || floors == 1)
return floors;
long long i = 1;
while(i){
if(i * (i + 1) / 2 >= floors)
return i;
i ++;
}
}
};