蓝桥每日打卡--区间移位
#蓝桥#JAVA#区间移位
题目描述
数轴上有n个闭区间:D1,⋯Dn。
其中区间Di用一对整数[ai,bi]来描述,满足 ai≤bi。
已知这些区间的长度之和至少有。
所以,通过适当的移动这些区间,你总可以使得他们的"并"覆盖 [0,],也就是说 [0,
]这个区间内的每一个点都落于至少一个区间内。
你希望找一个移动方法,使得位移差最大的那个区间的位移量最小。
具体来说,假设你将Di移动到 [ai+ci,bi+ci]这个位置。你希望使得max∣ci∣最小。
解题思路
首先这道题可以参考蓝桥每日打卡--打家劫舍4-CSDN博客这个最小化最大值的思路
①选取数组不相邻元素 ②限选≥k≥k个 ③求最大值(单个方案中能偷最多的)中的最小值(所有方案汇聚而成的可行域中的最小值)
触发条件:看到最大化最小值或最小化最大值,就要想到二分答案,这是固定套路
- 本题的二分指的是答案的二分——虽然
nums不是单调的,但答案的取值范围是单调的,可以二分查找区间的最小值
区间 [0, max_element]:| 不满足条件的区间 | 单次能偷的最大值范围(答案所在区间) |↑要找的在这里
check函数:判断单次窃取上限为maxL时,能否偷满至少k个minCapability函数:对答案所在区间进行二分查找- 因为答案分布在所有可能的结果中,所以将左指针初始化为
0,右指针初始化为数组最大值 - 要找的是答案所在区间的最小值
- 因为答案分布在所有可能的结果中,所以将左指针初始化为
贪心+二分查找
int minCapability(int[] nums, int k) {int left = 0, right = Integer.MIN_VALUE;for (int num : nums) right = Math.max(right, num);while (left < right) {int mid = (left + right) >> 1;if (check(nums, mid, k)) right = mid;else left = mid + 1;}return right;
}boolean check(int[] nums, int cap, int k) {int count = 0;for (int i = 0; i < nums.length; ++i) {if (nums[i] <= cap) {++count;++i; // 跳过相邻的}}return count >= k;
}
import java.util.*;public class Main {// 定义一个二维数组 intervals,用于存储输入的区间信息private static int[][] intervals;public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();intervals = new int[n][2];for (int i = 0; i < n; ++i) {// 读取每个区间的左端点,并将其乘以 2,这样做是为了方便后续计算,避免在计算位移量时进行除法操作intervals[i][0] = 2 * scan.nextInt();// 读取每个区间的右端点,并将其乘以 2intervals[i][1] = 2 * scan.nextInt();}scan.close();// 对 intervals 数组按照每个区间的右端点进行排序,使用 Comparator.comparingInt 方法指定排序规则Arrays.sort(intervals, Comparator.comparingInt(i -> i[1]));// 初始化二分查找的左边界为 0int left = 0;// 初始化二分查找的右边界为 20000,这里假设最大的位移量不会超过 20000int right = (int) 2e4;// 开始二分查找,使用左闭右开区间的二分查找模板while (left < right) { // 计算中间值 mid,使用位运算 >> 1 代替除以 2,提高计算效率int mid = (left + right) >> 1;// 调用 check 方法检查当前位移量 mid 是否满足条件if (check(mid)) // 如果满足条件,说明 mid 可能是一个可行解,将右边界更新为 mid,缩小查找范围right = mid;else// 如果不满足条件,说明 mid 太小,将左边界更新为 mid + 1,扩大查找范围left = mid + 1;}// 判断最终结果是否为偶数if (right % 2 == 0) // 如果是偶数,直接将结果除以 2 并输出System.out.println(right / 2);else// 如果是奇数,将结果转换为 double 类型后除以 2 并输出System.out.println((double) right / 2);}// 定义 check 方法,用于检查给定的位移量 shift 是否能使所有区间覆盖到指定范围private static boolean check(int shift) {// 初始化覆盖范围为 0int cover = 0;// 创建一个 ArrayList 并将 intervals 数组中的元素复制到其中,方便后续的删除操作List<int[]> temp = new ArrayList<>(Arrays.asList(intervals)); // 进入一个无限循环,用于逐个处理区间while (true) {// 标记是否有合格的区间,初始化为 falseboolean qualified = false;// 遍历 temp 列表中的每个区间for (int i = 0; i < temp.size(); ++i) {// 获取当前区间int[] interval = temp.get(i);// 检查当前区间向左移动 shift 后是否能连接到前面的覆盖范围,并且向右移动 shift 后不超过最大范围if (interval[0] - shift <= cover && interval[1] + shift >= cover) {// 如果满足条件,标记有合格的区间qualified = true;// 计算当前区间的长度int len = interval[1] - interval[0];// 如果当前区间左移后超过前面区间的覆盖范围,那么此次移动,覆盖范围最多只能增加当前区间本身的长度if (interval[0] + shift >= cover) cover += len;else// 若不能超过,覆盖范围最多是当前区间末端 + 位移量cover = interval[1] + shift;// 从 temp 列表中移除当前区间temp.remove(i);// 跳出当前 for 循环,避免 ConcurrentModificationException 异常break; }}// 如果没有合格的区间或者覆盖范围已经达到 20000,跳出无限循环if (!qualified || cover >= 2e4) break;}// 判断最终的覆盖范围是否达到 20000,如果达到则返回 true,否则返回 falsereturn cover >= 2e4;}
}
相关文章:
蓝桥每日打卡--区间移位
#蓝桥#JAVA#区间移位 题目描述 数轴上有n个闭区间:D1,⋯Dn。 其中区间Di用一对整数[ai,bi]来描述,满足 ai≤bi。 已知这些区间的长度之和至少有。 所以,通过适当的移动这些区间,你总可以使得他们的"并"覆盖 [0,],也…...
CUDAOpenCV 基于Hessian矩阵计算特征值
文章目录 一、简介二、实现代码三、实现效果一、简介 基于之前的博客:CUDA&OpenCV Hessain矩阵计算,我们可以计算出每个像素的特征值: 二、实现代码 ComputeHessainMatrix.cuh #ifndef HESSAIN_GPU_CUH #...
基于CAMEL 的Workforce 实现多智能体协同工作系统
文章目录 一、workforce 简介1.架构设计2.通信机制 二、workforce 工作流程图示例1.用户角色2.工作流程 三、workforce 中重要函数说明1.__init__函数2.add_single_agent_worker 函数3.add_role_playing_worker 函数4.add_workforce 函数 四、基于workforce实现多智能体协调&am…...
深入探讨 `ip2region` 中三种初始化方法:newWithBuffer、newWithVectorIndex 和 newWithFileOnly
在处理IP地址地理位置定位时,ip2region 提供了多种方式来初始化 Searcher 实例,以适应不同的应用场景和资源限制。本文将详细介绍并对比 newWithBuffer、newWithVectorIndex 和 newWithFileOnly 这三种初始化方法,帮助开发者根据自己的需求选…...
PostgreSQL_数据表结构设计并创建
目录 前置: 1 数据表设计思路 2 数据表格SQL 3 创建 3.1 创建数据库 db_stock 3.2 在 pgAdmin4 中创建表 前置: 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文 1 数据表设计思路 1 日数据来自优矿,优矿的数据…...
如何在MCU工程中启用HardFault硬错误中断
文章目录 一、HardFault出现场景二、启动HardFault三、C代码示例 一、HardFault出现场景 HardFault(硬故障) 错误中断是 ARM Cortex-M 系列微控制器中一个较为严重的错误中断,一旦触发,表明系统遇到了无法由其他异常处理机制解决…...
MySQL -- 复合查询
数据库的查询是数据库使用中比较重要的环节,前面的基础查询比较简单,不做介绍,可自行查阅。本文主要介绍复合查询,并结合用例进行讲解。 本文的用例依据Soctt模式的经典测试表,可以自行下载,也可以自己创建…...
@EnableWebMvc注解导致的坑-记录
1.添加了EnableWebMvc,需要手动添加相关配置,swagger页面问题,出现Unable to render this definition The provided definition does not specify a valid version field. Please indicate a valid Swagger or OpenAPI version field. Suppor…...
卷积神经网络 - 卷积层(具体例子)
为了更一步学习卷积神经网络之卷积层,本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念,一个针对灰度图像,一个针对彩色图像。 例子 1&#x…...
测试Claude3.7 sonnet画蛋白质
测试Claude3.7 sonnet画蛋白虽然画的很粗糙,但是大致画了出来...
java项目之基于ssm的游戏攻略网站(源码+文档)
项目简介 游戏攻略网站实现了以下功能: 管理员主要负责填充图书和其类别信息,并对已填充的数据进行维护,包括修改与删除,管理员也需要审核老师注册信息,发布公告信息,管理自助租房信息等。 💕…...
本地基于Ollama部署的DeepSeek详细接口文档说明
前文,我们已经在本地基于Ollama部署好了DeepSeek大模型,并且已经告知过如何查看本地的API。为了避免网络安全问题,我们希望已经在本地调优的模型,能够嵌入到在本地的其他应用程序中,发挥本地DeepSeek的作用。因此需要知…...
python NameError报错之导库报错
在日常代码编写中,经常出现如 图1 一样的报错,在代码多时很难找到问题,但翻看代码后就会发现是因为未导库, 图1 报错 代码: time.sleep(0.1) print("time库") 解决方法: 第一步:在代码中添加导库代码 import time #…...
Web3网络生态中数据保护合规性分析
Web3网络生态中数据保护合规性分析 在这个信息爆炸的时代,Web3网络生态以其独特的去中心化特性,逐渐成为数据交互和价值转移的新平台。Web3,也被称为去中心化互联网,其核心理念是将数据的控制权归还给用户,实现数据的…...
【数学建模】模糊综合评价模型详解、模糊集合论简介
模糊综合评价模型详解 文章目录 模糊综合评价模型详解1. 模糊综合评价模型概述2. 模糊综合评价的基本原理2.1 基本概念2.2 评价步骤 3. 模糊综合评价的数学模型3.1 数学表达3.2 模糊合成运算 4. 模糊综合评价的应用领域5. 模糊综合评价的优缺点5.1 优点5.2 缺点 6. 模糊综合评价…...
C++ 语法之数组指针
一维数组: 如果我们定义了一个一维数组,那么这个数组名,就是指向第一个数组元素的地址,也即,是整个数组分配的内存空间的首地址。 比如 int a[3]; 定义了一个包含三个元素的数组。因为一个int占4个字节,那…...
从0到1在windows上用flutter开发android app(环境准备、创建项目、加速构建)
一、项目环境准备 1、设置环境变量 需配置以下两个核心环境变量,以替换官方资源链接为国内镜像: Windows系统(通过PowerShell或系统属性面板设置) # 临时生效(当前会话) $env:PUB_HOSTED_URL = "https://pub.flutter-io.cn" $env:FLUTTER_STORAGE_BA…...
PLY格式文件如何转换成3DTiles格式——使用GISBox软件实现高效转换
一、概述 在三维GIS和数字孪生领域,3DTiles格式已成为主流的数据格式之一。它由Cesium团队提出,专为大规模3D数据可视化设计,能够高效地加载和展示海量模型数据。而PLY格式则是一种常见的三维模型文件格式,主要用于存储点云数据或…...
Java定时任务的三重境界:从单机心跳到分布式协调
《Java定时任务的三重境界:从单机心跳到分布式协调》 本文将以生产级代码标准,揭秘Java定时任务从基础API到分布式调度的6种实现范式,深入剖析ScheduledThreadPoolExecutor与Quartz Scheduler的线程模型差异,并给出各方案的性能压…...
响应压缩导致的接口请求response没有响应体问题排查
目录 一、背景二、排查过程三、解决方法四、学习与思考-响应压缩(一)可能原因(二)深入排查(三)注意 一、背景 接口发布到测试环境,测试同学说没有数据 二、排查过程 1、本地用相同的参数、相…...
【Linux网络】手动部署并测试内网穿透
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
java项目之在线购物系统(源码+文档)
项目简介 在线购物系统实现了以下功能: 使用在线购物系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的…...
【设计模式】C++ 单例模式总结与最佳实践
1. 单例模式简介 单例模式(Singleton Pattern) 是软件开发中常见的设计模式之一,主要用于 确保某个类只有一个实例,并提供一个全局访问点。常见的使用场景包括: 日志管理:全局唯一的日志记录器。数据库连…...
OO_Unit1
第一次作业 UML类图 代码复杂度分析 其中Expr中的toString方法认知复杂度比较高,主要源于多层条件嵌套和分散的字符串处理逻辑,重构时可重点关注这两部分的解耦。 代码量分析 1.”通用形式“ 我觉得我的设计的最大特点就是“通用形式”,具…...
重要重要!!fisher矩阵元素有什么含义和原理; Fisher 信息矩阵的形式; 得到fisher矩阵之后怎么使用
fisher矩阵元素有什么含义和原理 目录 fisher矩阵元素有什么含义和原理一、对角线元素( F i , i F_{i,i} Fi,i)的含义与原理二、非对角线元素( F i , j F_{i,j} Fi,j)的含义与原理Fisher 信息矩阵的形式矩阵的宽度有位置权重数量决定1. **模型参数结构决定矩阵维度**2.…...
[已解决]jupyter notebook报错 500 : Internal Server Error及notebook闪退
jupyter notebook出现如上图的报错,可以在黑色窗口中检查是为什么报错。 我检查发现是nbconvert导致的问题,卸载重装nbconvert。 但是这时候出现,jupyter notebook闪退问题。jupyter的黑色窗口出现一秒钟就没了。 在Anaconda Prompt中检查ju…...
2025年渗透测试面试题总结- 某亭-安全研究员(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 一、SQL注入过滤单引号绕过方法 二、MySQL报错注入常用函数 三、报错注入绕WAF 四、MySQL写文件函数…...
Redis分布式锁如何实现——简单理解版
目录 前言 满足条件 加锁之后产生的问题 避免死锁的方法 Lua脚本实现避免释放其他锁 看门狗判断过期 扩展 Lua脚本 Redission 前言 在如今开发的某些项目中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的,分布式…...
数字化转型驱动卫生用品安全革新
当315晚会上晃动的暗访镜头揭露卫生巾生产车间里漂浮的异物、纸尿裤原料仓中霉变的碎屑时,这一触目惊心的场景无情地撕开了“贴身安全”的遮羞布,暴露的不仅是部分企业的道德缺失,更凸显了当前检测与监管体系的漏洞,为整个行业敲响…...
北京南文观点:品牌如何抢占AI 认知的 “黄金节点“
在算法主导的信息洪流中,品牌正在经历一场隐蔽的认知权争夺战,当用户向ChatGPT咨询"哪家新能源车企技术最可靠"时,AI调取的知识图谱数据源将直接决定品牌认知排序。南文乐园科技文化(北京)有限公司ÿ…...
