Google 2016面试题

这是一道关于数组补丁问题的谷歌面试题目。要求在已排序的整数数组nums中添加最少数量的元素,使得数组可以表示1到n的所有整数。例如,当nums = [1, 3]且n = 6时,至少需要添加一个数2。" 20293093,2081873,ARM启动加载器:C语言环境初始化,"['嵌入式开发', 'ARM架构', 'bootloader', 'C编程', '汇编语言']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值