254 扔鸡蛋

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 ++;
        }
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值