题目:
来源:leetcode
思路:
看题解和讨论太少了,就没去做,感觉挺好想的。
->我该如何添加数字?
用题解的例子,你给别人x元,你怎么给,肯定是给小于等于x元的。
->添加哪个?
(1,2,3,8) n=16
【1,6】有了,没有7,那我想要7的话添加【1,7】之间任意一个数字都是可以的,如何选择?添加后,应该能扩展越多的数字更好。添加x,原来的范围就变成了【1,6+x】,所以肯定添加最大的呀,
(很细致的分析)
而且必有1
代码:
我真的五体投地了,自己写的代码麻烦的要死,
令我敬佩的优质代码
class Solution {
public:
int minPatches(vector<int>& nums, int n) {
int patches = 0, i = 0;//patch记录个数
long miss = 1; //表示我要去覆盖多少
while (miss <= n) {
if (i < nums.length && nums[i] <= miss) // 存在小于等于 要去覆盖 的
miss += nums[i++];
else {
miss += miss;
patches++;
}
}
return patches;
}
}