题目来源
给一个数组array和一个数n,要求最多加入几个元素才能使得array中的子集元素和能够构成从1-n的数。
想了半天也没想出来什么好方法。
看了下答案,又是StefanPochmann大神的解法,膜拜。
记录当前miss的最大值,然后加入array中存在一个未使用的并且小于等于miss的数字的话,那么可以构成miss+nums[i]那么大。
代码如下:
class Solution {
public:
int minPatches(vector<int>& nums, int n) {
long long miss = 1, added = 0, i = 0;
while (miss <= n) {
if (i < nums.size() && nums[i] <= miss) {
miss += nums[i++];
}
else {
miss *= 2;
added++;
}
}
return added;
}
};