1,对于任意情况,肯定可以找出其覆盖的[1,miss) 区间。因为要覆盖miss 所以添加的数字一定要<= miss ,然后覆盖的区间为[1,x] 和[x,x+miss) 即[1,x+mixx) (因为x<=miss) 所以为使区间最大,每次遇到间断处添加 miss (一个贪心选择)
2.思路:刚开始利用已有的数字,去探索扩大可以覆盖的原始区间的最右端miss,然后当碰到间断时,添加miss. 之后再去探索新的间断处。
class Solution {
public:
int minPatches(vector<int>& nums, int n) {
int ans=0,i=0;
long long miss=1;
while(miss<=n){
if(i<nums.size()&&nums[i]<=miss) miss+=nums[i++];
else{
miss+=miss;
ans++;
}
}
return ans;
}
};