leetcode330. 按要求补齐数组(java)

news2025/1/23 10:26:26

按要求补齐数组

  • 题目描述
    • 贪心算法
    • 代码演示

题目描述

难度 - 困难
leetcode - 330. 按要求补齐数组

给定一个已排序的正整数数组 nums ,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。
请返回 满足上述要求的最少需要补充的数字个数 。

示例 1:
输入: nums = [1,3], n = 6
输出: 1
解释:
根据 nums 里现有的组合 [1], [3], [1,3],可以得出 1, 3, 4。
现在如果我们将 2 添加到 nums 中, 组合变为: [1], [2], [3], [1,3], [2,3], [1,2,3]。
其和可以表示数字 1, 2, 3, 4, 5, 6,能够覆盖 [1, 6] 区间里所有的数。
所以我们最少需要添加一个数字。

示例 2:
输入: nums = [1,5,10], n = 20
输出: 2
解释: 我们需要添加 [2,4]。

示例 3:
输入: nums = [1,2,2], n = 5
输出: 0

提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 10^4
nums 按 升序排列
1 <= n <= 2^31 - 1
在这里插入图片描述

贪心算法

对于正整数 xxx,如果区间 [1,x−1]内的所有数字都已经被覆盖,且 x在数组中,则区间 [1,2x−1] 内的所有数字也都被覆盖。证明如下。

对于任意 1≤y<x,y 已经被覆盖,x 在数组中,因此y+x 也被覆盖,区间 [x+1,2x−1](即区间 [1,x−1]内的每个数字加上 x 之后得到的区间)内的所有数字也被覆盖,由此可得区间 [1,2x−1]内的所有数字都被覆盖。

假设数字 x 缺失,则至少需要在数组中补充一个小于或等于 x 的数,才能覆盖到 x,否则无法覆盖到 x。
如果区间 [1,x−1] 内的所有数字都已经被覆盖,则从贪心的角度考虑,补充 x 之后即可覆盖到 x,且满足补充的数字个数最少。在补充 x 之后,区间 [1,2x−1] 内的所有数字都被覆盖,下一个缺失的数字一定不会小于 2x。
由此可以提出一个贪心的方案。每次找到未被数组 nums 覆盖的最小的整数 x,在数组中补充 x,然后寻找下一个未被覆盖的最小的整数,重复上述步骤直到区间 [1,n] 中的所有数字都被覆盖。

具体实现方面,任何时候都应满足区间 [1,x−1]内的所有数字都被覆盖。令 x 的初始值为 1,数组下标 index 的初始值为 0,则初始状态下区间 [1,x−1] 为空区间,满足区间内的所有数字都被覆盖。进行如下操作。
1.如果 index 在数组 nums 的下标范围内且 nums[index]≤x,则将 nums[index]的值加给 x,并将 index的值加 1。
2. 被覆盖的区间从 [1,x−1]扩展到 [1,x+nums[index]−1],对 x 的值更新以后,被覆盖的区间为 [1,x−1]。
3.否则,x 没有被覆盖,因此需要在数组中补充 x,然后将 x 的值乘以 2。
在数组中补充 x 之后,被覆盖的区间从 [1,x−1] 扩展到 [1,2x−1],对 x 的值更新以后,被覆盖的区间为 [1,x−1]。
重复上述操作,直到 x 的值大于 n。

代码演示

class Solution {
    public int minPatches(int[] nums, int n) {
        long num = 1;
        int count = 0;
        int index = 0;
        while(num <= n){
            if(index < nums.length && nums[index] <=  num){
                num += nums[index++];
            }else{
                num *= 2;
                count++;
            }
        }
        return count;
    }

    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

演讲实录:大模型时代,我们需要什么样的AI算力系统?

当前&#xff0c;“百模大战”带来了算力需求的爆发&#xff0c;AI芯片产业也迎来巨大机遇&#xff0c;“创新架构开源生态”正在激发多元AI算力产品百花齐放。面对新的产业机会&#xff0c;AI算力产业链亟需通过上下游协作共同把握机遇。 近日&#xff0c;浪潮信息AI&HPC…

Unity Shader顶点数据疑问

1&#xff09;Unity Shader顶点数据疑问 2&#xff09;Unity 2018发布在iOS 16.3偶尔出现画面不动的问题 3&#xff09;安卓游戏启动后提示“应用程序异常” 这是第352篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、社区帖子等技术知…

MCU芯片测试:性能指标测试痛点是什么?ATECLOUD能否解决?

MCU芯片测试指标的核心是性能指标&#xff0c;包括处理器性能、存储器容量和读写速度&#xff0c;外设性能等。芯片测试对自动化测试的要求很高&#xff0c;ATECLOUD-IC不仅解决了传统测试方法的问题&#xff0c;而且也可以满足芯片测试的高要求&#xff0c;高效地完成MCU芯片性…

详解qsort函数的使用及模拟实现qsort函数

目录 引言&#xff1a; 1. qsort函数简介&#xff1a; &#x1f388;qsort函数原型&#xff1a; &#x1f388;函数参数介绍&#xff1a; &#x1f388;比较函数(compar)的编写&#xff1a; &#x1f388;(补充) void*类型的指针&#xff1a; 2.qsort函数示例&#xff1a;…

java将excel中用例写到world中【搬代码】

首先创建用例 例如&#xff1a; 运行代码: 预期结果&#xff1a; 实际结果&#xff1a;与预期结果不符合&#xff0c;哪位大佬有代码传授一下啊&#xff0c;实在是不知道咋写了 代码&#xff1a; package com.znzdh.qitagongju; import com.spire.doc.*; import com.spire…

安徽省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

安徽省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

InstallShield打包升级时不覆盖原有文件的解决方案

一个.NET Framework的Devexpress UI Windows Form项目&#xff0c;用的InstallShield&#xff0c;前些个版本都好好的&#xff0c;最近几个版本突然就没法更新了&#xff0c;每次更新的时候都覆盖不了原文件&#xff0c;而且这样更新后第一次打开程序&#xff08;虽然是老程序&…

ReID网络:MGN网络(5): 一点延伸: 缩减特征维度, 提高匹配效率

1. MGN网络输出 在实际使用MGN时&#xff0c;是将网络尾部的特征进行导出&#xff0c;并进行相关的相似性度量。 如图1所示&#xff0c;MGN特网络在析出特征的结尾处执行了concat操作。如果每一条特征维度是256的话&#xff0c;那么MGN最终输出将是2048维的特征。 图1 MGN特征…

香港汇丰银行开户

作为香港较知名的银行之一&#xff0c;汇丰银行提供了丰富的金融服务&#xff0c;包括个人银行服务、企业银行服务以及国际银行服务等。对于需要在香港开展业务或投资的人来说&#xff0c;开立一个汇丰银行账户是必不可少的。那么&#xff0c;开立汇丰银行账户需要哪些资料&…

医院用泛微构建数字化信创平台,人财物、医教研、文事会统一管理

近年来&#xff0c;国家多次发布政策&#xff0c;驱动医疗行业的智慧化转型。医疗行业作为重点领域&#xff0c;正在大力推进信创发展&#xff0c;数字化和信创将共同助力医院的高质量发展。 国家卫健委发布的《医院智慧管理分级评估标准体系&#xff08;试行&#xff09;》、…

【算法训练-数组 五】【二分查找】:旋转排序数组的最小数字、旋转排序数组的指定数字

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【数组的二分查找】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为…

fast-lio2添加wheel在发散时轨迹约束

fast-lio2主要算法为迭代误差卡尔曼滤波算法&#xff0c;imu作为预测&#xff0c;点云更新&#xff0c;当点云发散时输出位姿异常&#xff0c;漂移很大&#xff0c;后端在融合出现崩溃情况&#xff0c;加入轮速计约束发散时位姿。 1.订阅wheel话题 2.发散检测&#xff0c;检测…

mybatisplus配置拦截器实现保存加密,输出解密,模糊查询

前言&#xff1a;因公司需求需要把某些实体类的某些字段值进行加密保存&#xff0c;在查询时解密明文输出。现记录两种方式。 一、第一种方式&#xff1a; &#xff08;1&#xff09;使用TableField(typeHandler TypeHandler.class)注解自带的字段类型处理器&#xff0c;写一…

盲盒游戏开发方案

盲盒游戏是一种新兴的游戏类型&#xff0c;其核心机制是让玩家在购买时不知道会获得哪一种物品&#xff0c;从而产生一种探索的乐趣。那么&#xff0c;如何开发一个盲盒游戏呢&#xff1f;以下是一些步骤和要点。 一、确定游戏目标和规则 在开发盲盒游戏时&#xff0c;…

前端:nodejs多版本管理工具nvm

nvm是什么 nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具&#xff0c;为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 nvm下载 可在点此在github上下载最新版本,本次…

拷贝构造函数(深拷贝+浅拷贝)

目录 拷贝构造函数浅拷贝深拷贝 拷贝构造函数 拷贝构造函数&#xff1a; Myclass(const Myclass& myclass) {amyclass.a;bmyclass.b;cmyclass.c; }浅拷贝 浅拷贝的思路就是和默认的拷贝构造函数一样: 即将原对象的值直接赋值给新对象&#xff0c;这样做一般情况下是没什…

加拿大儿童床垫认证标准要求介绍SOR/2016-152

儿童床垫是专为儿童设计的睡眠配件&#xff0c;用于提供舒适的睡眠环境和正确的睡眠支持 SOR/2016-152是加拿大政府发布的法规&#xff0c;旨在确保儿童床垫的安全性和质量。SOR/2016-152标准要求儿童床垫具有足够的安全性能&#xff0c;能够保护儿童免受潜在的危险和伤害。 标…

ArcGIS10.1软件安装教程

ArcGIS10.1中英文&#xff08;32/64位)下载地址&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1Ksm112WaKMMk6La9ircCng 密码&#xff1a;t70f 安装步骤&#xff1a; 1、我们对安装包进行解压&#xff0c;直接鼠标右击解压即可。 2、 打开我们解压的文件夹&#…

瞄准办公场景,未来智能靠“AI+耳机”后来居上?

如何在广阔红海中开拓出蓝海&#xff1f;未来智能或可作为参考案例。 作为TWS耳机玩家&#xff0c;未来智能成立于2021年&#xff0c;日前完成了由天际资本领投的数千万元Pre-A轮融资&#xff0c;这也是该公司成立以来完成的第二轮融资。 从成立时间来看&#xff0c;在广阔的…

Python学习之路 01如何安装Python

&#x1f600;前言 在当今数字化的时代&#xff0c;编程已成为一项基本技能。Python&#xff0c;因其简洁易学、功能强大和高度可扩展性而闻名&#xff0c;已成为许多初学者和专业开发人员的首选编程语言。不仅如此&#xff0c;Python拥有一个庞大而活跃的社群&#xff0c;提供…