魔法货车题解
想法应该很容易想到,挑选最大的然后让它一直翻倍直到满足条件就可以了。这样做会超时么?可能很多人会有这样的疑惑而不敢写,但是我可以明确的告诉你,不会!原因是这是指数级增长的,,这意味着如果我们最大的是1也只需要操作30次即可。复杂度很小
class Solution {
public:
int Holy(int n, int m, vector<int>& x) {
// write code here
long long sum=0,mx=0;
for(int i=0;i<m;i++) {
mx=max(mx,x[i]+0ll);
sum+=x[i];
}
if(sum>=n) {
return 0;
}
long long lef=n-sum,tot=0;
while(lef>0) {
lef-=mx;
mx*=2;
tot++;
}
return tot;
}
};
查看7道真题和解析