1. 程式人生 > >Google 2016面試題

Google 2016面試題

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++; } sum2sum + 1; } } return
ans; } }