Patching Array

题目来源
给一个数组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;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容