給定已排序正整數數組 nums 和整數 n,向數組添加最少元素,使 [1, n] 內每個數都能由數組元素之和組成。返回最少添加次數。
維護當前可表示範圍 [1, miss)。若 nums[i] ≤ miss,則範圍擴展至 [1, miss + nums[i]);否則必須添加 miss,範圍翻倍至 [1, 2*miss)。
public class Solution {
public int minPatches(int[] nums, int n) {
long miss = 1;
int added = 0, i = 0;
while (miss <= n) {
if (i < nums.length && nums[i] <= miss) {
miss += nums[i++];
} else {
miss <<= 1;
++added;
}
}
return added;
}
}