Patching Array

题目来源
给一个数组array和一个数n,要求最多加入几个元素才能使得array中的子集元素和能够构成从1-n的数。
想了半天也没想出来什么好方法。
看了下答案,又是StefanPochmann大神的解法,膜拜。
记录当前miss的最大值,然后加入array中存在一个未使用的并且小于等于miss的数字的话,那么可以构成miss+nums[i]那么大。
代码如下:

class Solution {
public:
    int minPatches(vector& 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;
    }
};

你可能感兴趣的:(Patching Array)