题目描述
小扣打算给自己的 VS code
安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载。假定每分钟选择以下两种策略之一:
- 使用当前带宽下载插件
- 将带宽加倍(下载插件数量随之加倍)
请返回小扣完成下载 n
个插件最少需要多少分钟。
注意:实际的下载的插件数量可以超过 n
个
示例 1:
输入:n = 2
输出:2
解释:以下两个方案,都能实现 2 分钟内下载 2 个插件方案一:第一分钟带宽加倍,带宽可每分钟下载 2 个插件;第二分钟下载 2 个插件方案二:第一分钟下载 1 个插件,第二分钟下载 1 个插件示例 2:
输入:n = 4
输出:3
解释:
最少需要 3 分钟可完成 4 个插件的下载,以下是其中一种方案:
第一分钟带宽加倍,带宽可每分钟下载 2 个插件;
第二分钟下载 2 个插件;
第三分钟下载 2 个插件。
提示
1 <= n <= 10^5
解题思路
题目看了 3 遍,愣是没看出是啥意思,然后自己测试了一下 n = 8
,结果等于 4,瞬间懂了。 重新捋一遍题目,以 n = 8
为例:
- 第一分钟带宽加倍,当前一次能下 2 个,
- 第二分钟带宽加倍,当前一次能下 4 个,
- 第三分钟带宽加倍,当前一次能下 8 个,
- 第四分钟下载 8 个插件。
解题关键在于,在能一次下载完之前,所有时间全部加倍,直至 一次下载数量 >= n
,这样时间就是最短的,思路搞清楚了,代码实现起来非常简单。
def leastMinutes(self, n): """ :type n: int :rtype: int """ res = 0 while 2**res < n: res += 1 return res + 1 复制代码
今日打卡完成,目前进度 2/200。