Given a sorted positive integer array nums and an integer n, add/patch elements to the array such that any number in range
[1, n] inclusive can be formed by the sum of some elements in the array. Return the minimum number of patches required.
Example 1:
nums =
Return
nums =
[1, 3], n = 6Return
1.
Combinations of nums are
Now if we add/patch
Possible sums are
So we only need
[1], [3], [1,3], which form possible sums of: 1, 3, 4.Now if we add/patch
2 to nums, the combinations are: [1], [2], [3], [1,3], [2,3], [1,2,3].Possible sums are
1, 2, 3, 4, 5, 6, which now covers the range [1, 6].So we only need
1 patch.
Example 2:
nums =
Return
The two patches can be
nums =
[1, 5, 10], n = 20Return
2.The two patches can be
[2, 4].
Example 3:
nums =
Return
nums =
[1, 2, 2], n = 5Return
0.public int minPatches(int[] nums, int n) {
if (nums == null)
return 0;
long patches = 0;
long miss = 1;
int pos = 0;
while (miss <= n) {
if (pos < nums.length && nums[pos] <= miss)
miss += nums[pos++];
else {
miss += miss;
patches++;
}
}
return (int)patches;
}
No comments:
Post a Comment