题意理解
下载插件,每分钟下载一个插件,每分钟可选策略有两个,一个是当前速度下载;一个是速度加倍同时后面下载速度都按新速度来。问下载n个插件最少需要几分钟?
问题分析
模拟+贪心
题意比较绕,需要多解释下,对于当前一分钟来看,可以按照当前速度下载,也可以当前一分钟不下载只加倍再到下一分钟下载。所以思路是贪心,看看剩余插件数是不是小于速度的2倍,小的话就按当前速度下载。
其他
此题花的时间比较长,是因为加速时候需要一分钟,而且加倍可以翻番加倍。理解力啊。
链接
class Solution {
public:
int leastMinutes(int n) {
int cnt = 0, cur = 1;
while (n > 0) {
if (n > cur * 2) {
cur = cur * 2;
}
else {
n = n - cur;
}
cnt ++ ;
}
return cnt;
}
};