Problem Description
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.
[https://leetcode.com/problems/patching-array/]
思路
1肯定是要加入到nums里的,所以我们从now=1开始,这时的范围是(1,1),然后从nums的最小值a开始,如果a<=now,说明那我们可以把范围扩大到[1,now+a),就是可以让now=now+a;如果a>now,说明我们的范围不到a,这时要加入一个数now,这样我们的范围就扩大了两倍,就是now=now*2.
一直循环到now>n,就可以得到需要加进去的数的个数了。
Code
package q330;
public class Solution {
public int minPatches(int[] nums, int n) {
int sum = 0;
long now = 1;
int i = 0;
while (now <= n) {
if (i<nums.length&&nums[i] <= now) {
now += nums[i++];
} else {
now+=now;
sum++;
}
}
return sum;
}
// public static void main(String[] args) {
// Solution s = new Solution();
// int[] a = { 1, 2, 31, 33 };
// System.out.println(s.minPatches(a, Integer.MAX_VALUE));
// }
}