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;
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号