Google 2016面試題
阿新 • • 發佈:2019-02-19
1、陣列補丁
- 給出一個從小到大排好序的整數陣列nums和一個整數n,在陣列中新增若干個補丁(元素)使得[1,n]的區間內的所有數都可以表示成nums中若干個數的和。返回最少需要新增的補丁個數。
Example 1:
nums = [1, 3], n = 6
返回1,表示至少需要新增1個數{2},才可以表示1到6之間所有數。
Example 2:
nums = [1, 5, 10], n = 20
返回2,表示至少需要新增兩個數{2,4},才可以表示1到20之間所有數。
public class Solution {
public int minPatches(int[] nums, int n) {
long sum = 0;
int ans = 0;
int index = 0;
if (nums.length > 0 && nums[0] == 1) {
sum = 1;
index = 1;
}
while (sum < n)
{
while (index < nums.length && nums[index] <= sum)
{
sum += nums[index];
index++;
}
if (sum < n) {
if (index < nums.length && nums[index] == sum + 1)
index++;
else {
ans++;
}
sum = 2 * sum + 1;
}
}
return ans;
}
}