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 = 6
Return
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 = 20
Return
2
.The two patches can be
[2, 4]
.
Example 3:
nums =
Return
nums =
[1, 2, 2]
, n = 5
Return
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