专门做美甲的网站/凤凰军事新闻最新消息

专门做美甲的网站,凤凰军事新闻最新消息,邢台移动网站建设价格,太原网站建设总部在哪#蓝桥#JAVA#打家劫舍4 题目描述 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃…

#蓝桥#JAVA#打家劫舍4

题目描述

沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。

由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。

小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额 。

给你一个整数数组 nums 表示每间房屋存放的现金金额。形式上,从左起第 i 间房屋中放有 nums[i] 美元。

另给你一个整数 k ,表示窃贼将会窃取的 最少 房屋数。小偷总能窃取至少 k 间房屋。

返回小偷的 最小 窃取能力。

示例 1:

输入:nums = [2,3,5,9], k = 2
输出:5
解释:
小偷窃取至少 2 间房屋,共有 3 种方式:
- 窃取下标 0 和 2 处的房屋,窃取能力为 max(nums[0], nums[2]) = 5 。
- 窃取下标 0 和 3 处的房屋,窃取能力为 max(nums[0], nums[3]) = 9 。
- 窃取下标 1 和 3 处的房屋,窃取能力为 max(nums[1], nums[3]) = 9 。
因此,返回 min(5, 9, 9) = 5 。

解题思路

本题采用二分查找算法来高效地找出满足条件的最小能力值。二分查找的前提是问题的解空间具有单调性,在本题中,能力值越大,能够偷取的不相邻房屋数量就可能越多,因此可以利用二分查找不断缩小可能的能力值范围,直到找到最小的满足条件的能力值。

具体步骤

1. 确定二分查找的左右边界
  • 左边界 lower:通过 Arrays.stream(nums).min().getAsInt() 找出数组 nums 中的最小值。这是因为最小的能力值至少要能够偷取到数组中金额最小的房屋。
  • 右边界 upper:通过 Arrays.stream(nums).max().getAsInt() 找出数组 nums 中的最大值。这是因为最大的能力值最多为数组中金额最大的房屋的金额。
2. 二分查找过程
  • 使用 while(lower <= upper) 循环进行二分查找,只要左边界小于等于右边界,就继续查找。
  • 在每次循环中,计算当前左右边界的中间值 middle,作为本次猜测的能力值。
3. 检查当前能力值是否满足条件
  • 初始化计数器 count 为 0,用于记录在当前能力值下可以偷取的不相邻房屋的数量。
  • 初始化布尔变量 visited 为 false,用于标记上一个房屋是否被偷取。
  • 遍历数组 nums 中的每个元素 x
    • 如果 x <= middle 且 !visited,说明当前房屋的金额小于等于当前猜测的能力值,并且上一个房屋没有被偷取,此时可以偷取当前房屋,将 count 加 1,并将 visited 标记为 true
    • 否则,将 visited 标记为 false,表示当前房屋不被偷取。
4. 根据检查结果调整二分查找的边界
  • 如果 count >= k,说明在当前能力值下可以偷取到至少 k 个不相邻的房屋,当前能力值可能过大,将右边界 upper 更新为 middle - 1,缩小查找范围。
  • 否则,说明当前能力值过小,将左边界 lower 更新为 middle + 1,扩大查找范围。
5. 返回结果
  • 当二分查找结束后,左边界 lower 即为满足条件的最小能力值,将其返回。
class Solution {public int minCapability(int[] nums, int k) {int lower = Arrays.stream(nums).min().getAsInt();// 使用 Java 8 的 Stream API 对数组 nums 进行操作// Arrays.stream(nums) 将数组转换为流// min() 方法找出流中的最小值// getAsInt() 方法将 OptionalInt 类型的结果转换为 int 类型// 最终将数组中的最小值赋给变量 lower,作为二分查找的左边界int upper = Arrays.stream(nums).max().getAsInt();// 同样使用 Stream API// max() 方法找出流中的最大值// getAsInt() 方法将结果转换为 int 类型// 把数组中的最大值赋给变量 upper,作为二分查找的右边界while(lower <= upper){// 开始二分查找的循环,只要左边界小于等于右边界,就继续循环int middle = (lower + upper)/2;// 计算当前左右边界的中间值,作为本次猜测的能力值int count = 0;// 初始化一个计数器 count,用于记录在当前能力值下可以偷取的房屋数量boolean visited = false;// 初始化一个布尔变量 visited,用于标记上一个房屋是否被偷取for(int x :nums){// 遍历数组 nums 中的每个元素 xif(x <= middle&&!visited){// 如果当前房屋的金额 x 小于等于当前猜测的能力值 middle,并且上一个房屋没有被偷取count ++;// 则偷取当前房屋,计数器 count 加 1visited = true;// 标记当前房屋已被偷取}else{visited = false;// 否则,标记当前房屋未被偷取}}if(count >= k){// 如果在当前能力值下可以偷取的房屋数量 count 大于等于要求的数量 kupper = middle -1;// 说明当前能力值可能过大,将右边界 upper 更新为 middle - 1,缩小查找范围}else{lower = middle+1;// 否则,说明当前能力值过小,将左边界 lower 更新为 middle + 1,扩大查找范围}}return lower;// 当二分查找结束后,左边界 lower 即为满足条件的最小能力值,将其返回}
}

同时,利用二分法这里给出了更优的解决方案

class Solution {public int minCapability(int[] nums, int k) {int n = nums.length;int max = 0, min = Integer.MAX_VALUE;// 初始化 max 为 0,用于存储数组中的最大值// 初始化 min 为 Integer.MAX_VALUE,用于存储数组中的最小值for(int x:nums){// 遍历数组 nums 中的每个元素 xif(x < min) min = x;// 如果当前元素 x 小于 min,则更新 min 为 xif(x > max) max = x;// 如果当前元素 x 大于 max,则更新 max 为 x}int left = min, right = max;// 初始化二分查找的左边界 left 为数组的最小值// 初始化二分查找的右边界 right 为数组的最大值while(left <= right){// 开始二分查找的循环,只要左边界小于等于右边界,就继续查找int mid = left + right >> 1;// 计算当前左右边界的中间值 mid,作为本次猜测的能力值// 这里使用位运算 >> 1 代替除以 2,以提高计算效率int count = 0;// 初始化计数器 count,用于记录在当前能力值下可以偷取的房屋数量for(int i = 0; i < n; ++i){// 遍历数组 numsif(nums[i] <= mid){// 如果当前房屋的金额 nums[i] 小于等于当前猜测的能力值 midif(++count == k)break;// 先将计数器 count 加 1,若加 1 后 count 等于 k,说明已经找到了 k 个满足条件的房屋,退出循环++i;// 跳过下一个房屋,确保偷取的房屋不相邻}}if(count >= k)right = mid - 1;// 如果在当前能力值下可以偷取的房屋数量 count 大于等于 k,说明当前能力值可能过大,将右边界 right 更新为 mid - 1,缩小查找范围elseleft = mid + 1;// 否则,说明当前能力值过小,将左边界 left 更新为 mid + 1,扩大查找范围}return left;// 当二分查找结束后,左边界 left 即为满足条件的最小能力值,将其返回}
}

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

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

相关文章

c#难点整理

1.何为托管代码&#xff0c;何为非托管代码 托管代码就是.net框架下的代码 非托管代码&#xff0c;就是非.net框架下的代码 2.委托的关键知识点 将方法作为参数进行传递 3.多维数组 4.锯齿数组 5.多播委托的使用 6.is运算符 相当于逻辑运算符是 7.as 起到转换的作用 8.可…

数据结构之栈的2种实现方式(顺序栈+链栈,附带C语言完整实现源码)

对于逻辑关系为“一对一”的数据&#xff0c;除了用顺序表和链表存储外&#xff0c;还可以用栈结构存储。 栈是一种“特殊”的线性存储结构&#xff0c;它的特殊之处体现在以下两个地方&#xff1a; 1、元素进栈和出栈的操作只能从一端完成&#xff0c;另一端是封闭的&#xf…

Jmeter旧版本如何下载

1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本&#xff1a;5.4.1

css-grid布局

文章目录 1、布局2、网格轨道3、间距Gap4、网格线5、网格别名 当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid 后&#xff0c;它就变成了一个网格容器&#xff0c;这个元素的所有直系子元素将成为网格元素。 1、布局 启用grid布局类似与flex布局&#xff0c;不过g…

SolidWorks使用显卡教程

操作步骤&#xff1a; 打开注册表编辑器 按下键盘上的 Win R 组合键&#xff0c;输入 regedit 并按回车键&#xff0c;打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径&#xff1a; plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…

【C++11】左值引用、右值引用、移动语义和完美转发

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;左值引用和右值引用 &#x1f38f;左值和左值引用 &#x1f38f;右值和右值引用 &#x1f4cc;左值引用和右值引用比较 &#x1f38f;左值引用 &#x1f38f;右值…

【机密计算顶会解读】11:ACAI——使用 Arm 机密计算架构保护加速器执行

导读&#xff1a;本文介绍ACAI&#xff0c;其构建一个基于CCA的解决方案&#xff0c;使得机密虚拟机能够安全地使用加速器&#xff0c;同时保持与现有应用程序的兼容性和安全性&#xff0c;能够实现对加速器的安全访问。 原文链接&#xff1a;ACAI: Protecting Accelerator Ex…

【Java SE】抽象类/方法、模板设计模式

目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式&#xff08;抽象类使用场景&#xff09; 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法&#xff0c;需要声明&#xff0c;但是又不确定如何实现时&#xff…

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接&#xff1a;从零开始的DeepSeek微调训练实战&#xff08;SFT&#xff09; 微调参考示例&#xff1a;由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…

流畅如丝:利用requestAnimationFrame优化你的Web动画体验

requestAnimationFrame 是前端开发中用于优化动画性能的 API。它允许浏览器在下一次重绘之前执行指定的回调函数&#xff0c;通常用于实现平滑的动画效果。 1.作用 优化性能&#xff1a;requestAnimationFrame 会根据浏览器的刷新率&#xff08;通常是 60Hz&#xff0c;即每秒…

【pytest框架源码分析五】pytest插件的注册流程

前文介绍到pytest整体是运用插件来实现其运行流程的。这里仔细介绍下具体过程。 首先进入main方法 def main(args: list[str] | os.PathLike[str] | None None,plugins: Sequence[str | _PluggyPlugin] | None None, ) -> int | ExitCode:"""Perform an i…

IoTDB日志提示Too many open files

问题 时序数据库 IoTDB 1.3.3 版本 IoTDB 执行查询操作失败&#xff0c;日志打印提示 Too many open files。通过命令查看打开文件数&#xff0c;结果如下&#xff1a; [root0002 DataReceiver]# lsof|grep 28347|wc -l DataNode 55444 [root0002 DataReceiver]# lsof|g…

prometheus 添加alertmanager添加dingtalk机器人告警

1、dingtalk创建机器人,目前我们采用加白名单的方式校验 2、定位到如下图 test结果如下

C 语 言 --- 操 作 符 2

C 语 言 --- 操 作 符 2 移 位 操 作 符定 义原 码 补 码 和 反 码左 移&#xff08;<<&#xff09;右 移&#xff08;>>&#xff09;算 术 右 移逻 辑 右 移 按 位 与、按 位 或、和 按 位 异 或按 位 与按 位 或按 位 异 或 逻 辑 反 操 作负 值 操 作按 位 取 反…

基于Spring Boot的公司资产网站的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

零碳工厂能源管理系统的核心技术与应用实践

零碳工厂能源管理系统是一种高效的解决方案&#xff0c;旨在优化能源使用并减少碳排放&#xff0c;以帮助工厂实现低碳或零碳的生产目标。以下是该系统的详细构成和功能&#xff1a; 1. 核心组件 传感器和监测设备&#xff1a;用于实时监测工厂内的能源使用情况&#xff0c;包…

美摄接入DeepSeek等大模型,用多模态融合重构视频创作新边界!

今年以来&#xff0c;DeepSeek凭借其强大的深度推理分析能力&#xff0c;在AI领域掀起新的热潮。美摄科技快速响应市场需求&#xff0c;迅速接入以DeepSeek、通义千问、商汤、文心一言为代表的大模型&#xff0c;为企业视频创作生产带来全新体验。 传统视频创作面临着同质化、…

【yolo】yolo训练报错,以及解决方案

背景&#xff1a; 刚刚&#xff0c;写了《【yolo】yolo推理报错&#xff0c;以及解决方案》&#xff0c;马上训练就遇到类似的报错。 我对我标注的图像进行了300轮的训练&#xff0c;但是训练完300轮后&#xff0c;报错了。。。 报错信息 300 epochs completed in 0.085 hou…

理解线性动力学中的模态叠加法

线性动力学中的模态叠加方法 模态叠加法是线性动力学中一种有价值的工具&#xff0c;可以有效地确定频域或时域中的系统响应。对于某些类型的线性动力学分析&#xff0c;有必要使用此方法&#xff0c;因此了解该过程对于获得准确的结果至关重要。在本博客中&#xff0c;我们将…

报错 - redis - Unit redis.service could not be found.

报错&#xff1a; Unit redis.service could not be found.Could not connect to Redis at 127.0.0.1:6379: Connection refused解决方法&#xff1a; 检查状态、有必要的话 重新安装 Linux 上查看状态 systemctl status redis显示以下内容&#xff0c;代表正常服务 出现下面…