drop eggs

两枚鸡蛋问题:寻找最优解

There is a building of n floors. If an egg drops from the k th floor or above, it will break. If it's dropped from any floor below, it will not break.

You're given two eggs, Find k while minimize the number of drops for the worst case. Return the number of drops in the worst case.

Example

Example 1:

Input: 100
Output: 14

Example 2:

Input: 10
Output: 4

Clarification

For n = 10, a naive way to find k is drop egg from 1st floor, 2nd floor ... kth floor. But in this worst case (k = 10), you have to drop 10 times.

Notice that you have two eggs, so you can drop at 4th, 7th & 9th floor, in the worst case (for example, k = 9) you have to drop 4 times.

思路:目标就是找到一种策略,使得无论哪一楼破裂,我们找到那一层所用到的数目都是一样的,也就是怎么将N怎么分成几段,然后每次找的次数都是一样的。

例如:总数是10,那么我们从4,7,9测试,所得到的次数都是4次。

4破裂 1,2,3, 总共1+3 = 4次;

7破裂,4没破裂,5,6,总共也是4次

9破裂,4,7没破裂,8,总共也是4次。

如果分的原则就是第x , 第x+ (x-1) ,第X+(x-1) +(x-2)  ....

也就是x +(x-1) +(x-2) +...+2+1 >= n

我们就是要找到这个x是多少第一次使得公式成立。

https://www.youtube.com/watch?v=NGtt7GJ1uiM

public class Solution {
    /**
     * @param n: An integer
     * @return: An integer
     */
     // x + (x-1) + (x-2) + (x-3) + .. + 1 >=n;
    public int dropEggs(int n) {
        if(n <= 0) return 0;
        
        long index = 1;
        while(index*(index+1) / 2 < n){
            index = index*2;
        }
        
        long start = 1;
        long end = index;
        
        // find first x which let x*(x+1) / 2 >= n;
        while(start + 1 < end) {
            long mid = start +(end - start) / 2;
            if(mid*(mid+1) / 2 > n){
                end = mid;
            } else {
                start = mid;
            }
        }
        
        if(start*( start+1) / 2 >= n){
            return (int)start;
        }
        return (int)end;
    }
}

 

 

 

 

<think>好的,用户现在问的是“Python-Eggs是什么文件夹”。我需要先回顾之前的对话历史。之前用户询问的是关于一个具体的.egg文件的使用方法,现在他们可能是在处理Python项目时遇到了这个文件夹,或者在自己的项目目录中看到了这样的文件夹,想要了解它的作用和用途。 首先,我需要确定用户可能的背景。他们可能在使用一些旧版的Python包管理工具,比如setuptools或者easy_install,这些工具会生成或使用.egg文件。也有可能他们在项目目录中看到了一个名为“Python-Eggs”的文件夹,想要了解其作用,或者是否安全删除。 接下来,我需要解释什么是Python-Eggs文件夹。通常,.egg文件是Python的一种旧式包格式,类似于现代的wheel(.whl)文件。Eggs文件夹可能存放这些打包的库文件,或者是解压后的临时文件。当用户使用easy_install安装包时,可能会自动生成这个文件夹来存放下载或编译的egg文件。 然后,我需要考虑用户可能的实际需求。他们可能想知道这个文件夹是否可以删除,或者是否重要。如果是临时文件夹,比如在项目构建过程中生成的,通常可以安全删除。但如果是安装的库的一部分,删除可能会导致依赖问题。 此外,用户可能没有意识到egg格式已经被wheel取代,现在更推荐使用pip和wheel进行包管理。可能需要建议用户升级到现代工具,避免使用旧有的easy_install,以减少对egg格式的依赖,同时提高兼容性和维护性。 还要注意用户可能遇到的常见问题,比如权限问题或路径问题,尤其是在不同环境下使用egg时。可能需要提醒用户检查环境变量如PYTHONPATH,或者使用虚拟环境来管理依赖,避免系统范围的安装带来的问题。 最后,需要确保回答清晰,分点说明,涵盖定义、常见位置、是否可删除、注意事项以及替代方案。这样用户能够全面了解Python-Eggs文件夹的作用,并根据自己的情况采取相应措施。</think>`.egg` 是 Python **旧式包分发格式**(类似于现代的 `.whl` 轮子文件),而 **`Python-Eggs` 文件夹**通常是某些工具自动生成的目录,用于临时存放 `.egg` 文件或解压后的包内容。以下是详细解释: --- ### **1. `.egg` 文件与 `Python-Eggs` 文件夹的作用** - **`.egg` 文件**: - 是 **旧版 `setuptools` 工具**生成的包格式,用于安装 Python 库。 - 类似 `.zip` 压缩包,包含代码、依赖信息和元数据。 - 已被更现代的 **`.whl`(Wheel)** 格式取代(推荐使用 `pip install` 安装 `.whl`)。 - **`Python-Eggs` 文件夹**: - **常见来源**: - 使用 `easy_install` 安装包时自动生成。 - 某些项目构建工具(如旧版 `zc.buildout`)默认创建的缓存目录。 - 用户手动解压 `.egg` 文件后的存放路径。 - **典型位置**: - `/tmp/` 或 `/var/tmp/` 下的临时目录(如 `/tmp/python-eggs`)。 - 用户主目录下(如 `~/.python-eggs`)。 - 项目根目录中的自定义路径(如 `myproject/Python-Eggs`)。 --- ### **2. 能否删除 `Python-Eggs` 文件夹?** - **可以删除**,但需注意: - **临时目录**(如 `/tmp/python-eggs`):系统重启后自动清理,无需手动删除。 - **用户主目录**(如 `~/.python-eggs`):若已安装的包依赖这些缓存,删除可能导致程序报错(但通常可自动重建)。 - **项目目录**(如 `myproject/Python-Eggs`):如果是开发时生成的临时文件,可删除;若包含核心依赖,需谨慎。 --- ### **3. 注意事项** - **兼容性问题**: - `.egg` 格式对 Python 3 支持有限,现代项目建议使用 `.whl`。 - 若项目中必须使用 `.egg`,需配合 `Python 2.x` 和 `setuptools<50.0`(新版 `setuptools` 已弃用 `.egg`)。 - **权限问题**: ```bash # 若因权限无法写入 Python-Eggs 目录,可临时指定其他路径 export PYTHON_EGG_CACHE=/tmp/my-custom-egg-dir ``` - **替代方案**: - 使用 `pip install` 和 `wheel` 格式替代 `easy_install` 和 `.egg`。 - 通过虚拟环境(如 `venv` 或 `conda`)隔离依赖,避免系统目录污染。 --- ### **4. 示例场景** 假设你在运行程序时遇到报错: `"Could not install Pythoneggs. Maybe you need to set PYTHON_EGG_CACHE?"` **解决方法**: ```bash # 手动创建缓存目录并赋予权限 mkdir -p ~/.python-eggs chmod 777 ~/.python-eggs # 或在运行程序前指定临时路径 export PYTHON_EGG_CACHE=/tmp/my-eggs ``` --- ### **总结** - `Python-Eggs` 是旧式包管理工具生成的**缓存或临时目录**,通常可安全删除。 - 现代 Python 开发中,**优先使用 `pip` + `venv`** 替代 `easy_install` + `.egg`。 - 若需维护遗留项目,注意保留 `.egg` 文件的兼容性环境。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值