Google 2016面试题

来源:互联网 发布:mysql 分组 字段累加 编辑:程序博客网 时间:2024/05/18 00:49

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;    }}
0 0
原创粉丝点击