LeetCode 330-Patching Array

分析

  • miss记录当前集合已经完成[0, miss)所有组合。
  • 当前值nums[i]小于等于miss时,表示在集合中增加nums[i]可以使组合范围增大到[0, miss+nums[i])。
  • 当前值nums[i]大于miss时,增加nums[i]并不能让集合覆盖[0, miss+nums[i]),此时最好的方法是加miss,使得范围增大到[0, 2 * miss)。
class Solution {
public:
    int minPatches(vector& nums, int n) {
        long miss = 1;
        int ret = 0, i = 0;
        while (miss <= n) {
            if (i < nums.size() && nums[i] <= miss) {
                miss += nums[i++];
            } else {
                miss <<= 1;
                ++ret;
            }
        }
        return ret;
    }
};

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