LeetCode 330. 按要求补齐数组
Hard题目,之前也想到了从1开始遍历直接打表进行边界判断,但是一直设想的是寻找某种方法进行逐个元素的遍历,但是没有想到可以直接进行乘2边界判定;

值得注意的点是,看似最大边界是2的阶乘,其实不然;
如果nums数组中含有已经可以正常的元素,则边界会发生改变,究其原因题目中是指定每个元素只可以出现一遍:

这道题注意下max的大小问题,C++用int会溢出,题目中没有给边界,有点坑;
int minPatches(vector<int>& nums, int n) {
int index = 0;//nums数组索引;
int max_num = 1;//最大左闭区间值;
int count = 0;
while (max_num < n) {
if (index < nums.size() && nums[index] <= max_num) {
max_num += nums[index++];
}else {
max_num *= 2;
count++;
}
}
return count;
}

浙公网安备 33010602011771号