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;
}

 

posted @ 2020-12-29 09:31  暮云林凌  阅读(133)  评论(0)    收藏  举报