330. 按要求补齐数组

给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/patching-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int minPatches(int[] nums, int n) {
        long range = 0;
        int ans = 0;
        int index = 0;
        while (range < n) {
            /**
             * 数组中的元素可以扩展,则使用数组中的元素
             */
            while (index < nums.length && nums[index] <= range + 1 && range < n) {
                range = range + nums[index++];
            }

            /**
             * 数组不能扩展且未达到目标,则添加数字 range + 1
             */
            if (range < n) {
                ans++;
                range = 2 * range + 1;
            }
        }
        return ans;
    }
}
posted @ 2022-01-24 23:50  Tianyiya  阅读(31)  评论(0)    收藏  举报