当前位置: 首页 > news >正文

day29-贪心__134. 加油站__135. 分发糖果__860.柠檬水找零__406.根据身高重建队列

134. 加油站

这道题的贪心方法相当的巧妙。

首先,我们可以通过gas[i] - cost[i]得到第i个站点的净加油量(耗油量),那么如果我们现在考虑一个从某点a到某点b,那么如果a-》b范围之间的gas[i] - cost[i]存在负数,那么说明无法从a作为起点到达b,那么我们就必须考虑从b+1,开始作为起点。那为什么不从a+1或者a->b中的某一点到达呢,这里可以使用反证法证明出来,详情见:链接。

此外我们可以同时维护一个totalSum,如果totalSum<0,说明无论从那个点出发,都无法绕行一周。

代码如下:

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {for (int i = 0; i < cost.size(); i++) {int rest = gas[i] - cost[i]; // 记录剩余油量int index = (i + 1) % cost.size();while (rest > 0 && index != i) { // 模拟以i为起点行驶一圈(如果有rest==0,那么答案就不唯一了)rest += gas[index] - cost[index];index = (index + 1) % cost.size();}// 如果以i为起点跑一圈,剩余油量>=0,返回该起始位置if (rest >= 0 && index == i) return i;}return -1;}
};

135. 分发糖果

这道题的话,我们主要要同时考虑一个元素的左右两个位置,如果我们在一次循环中同时处理左右位置的话,这显然会很复杂。但是现在,我们可以考虑将同时考虑左右两个位置,转换为单独考虑左侧之后,再单独考虑右侧。

单独考虑左侧时,如果当前元素大于前一个元素,那么所给的糖果数量就是前一个位置的糖果数量加1。

考虑完左侧之后,考虑右侧。但是这里就有问题了,这一次我们还是从左往右遍历嘛。显然不对,因为我们考虑右侧时,每一个位置的结果,都要依赖于其左侧的元素得出。所以我们的遍历顺序也必须是从右到左。

当后一个元素大于当前元素时,该位置的糖果数量就是单独考虑左侧时的糖果数量和后一个元素的糖果数量+1取最小值,这样能保证我们最终得到的糖果是最少的。

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {for (int i = 0; i < cost.size(); i++) {int rest = gas[i] - cost[i]; // 记录剩余油量int index = (i + 1) % cost.size();while (rest > 0 && index != i) { // 模拟以i为起点行驶一圈(如果有rest==0,那么答案就不唯一了)rest += gas[index] - cost[index];index = (index + 1) % cost.size();}// 如果以i为起点跑一圈,剩余油量>=0,返回该起始位置if (rest >= 0 && index == i) return i;}return -1;}
};

860.柠檬水找零

这道题其实相当简单,因为给的场景很固定,我们只需要维护三个变量five ten 和 twenty的值。

当顾客给五元时,five++即可;

当顾客给十元时,查看five是否>=1,如果不满足就返回false。满足就ten++,five++;

当顾客给二十元时,这个时候就有了两种处理方案,一种是找三张5元,另一种是一张10元,一张5元。那么我们应该优先选择哪一种呢。当然是10+5啦!因为5元再找零时作用更大,所以先选择10+5的方式进行找零。

所以这样代码就很容易了

代码如下:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five = 0,ten = 0,twenty = 0;for(int i=0;i<bills.size();i++){if(bills[i] == 5) five++;if(bills[i] == 10){if(five == 0) return false;five--;ten++;}if(bills[i] == 20){if(ten > 0 && five > 0){ten--;five--;twenty++;}else if(five >= 3){five = five -3;twenty++;}else return false;}}return true;}
};

406. 根据身高重建队列

这道题,每个vector都有两个维度,一个是身高h,另外一个是前面有多少个人比起更高k。这里如果我们选择按照身高h对这些vector进行一次递减排序,那么我们第二次处理k的话会相当的方便。

代码如下:

class Solution {
public:// 身高从大到小排(身高相同k小的站前面)static bool cmp(const vector<int>& a, const vector<int>& b) {if (a[0] == b[0]) return a[1] < b[1];return a[0] > b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort (people.begin(), people.end(), cmp);list<vector<int>> que; // list底层是链表实现,插入效率比vector高的多for (int i = 0; i < people.size(); i++) {int position = people[i][1]; // 插入到下标为position的位置std::list<vector<int>>::iterator it = que.begin();while (position--) { // 寻找在插入位置it++;}que.insert(it, people[i]);}return vector<vector<int>>(que.begin(), que.end());}
};

相关文章:

day29-贪心__134. 加油站__135. 分发糖果__860.柠檬水找零__406.根据身高重建队列

134. 加油站 这道题的贪心方法相当的巧妙。 首先&#xff0c;我们可以通过gas[i] - cost[i]得到第i个站点的净加油量(耗油量)&#xff0c;那么如果我们现在考虑一个从某点a到某点b&#xff0c;那么如果a-》b范围之间的gas[i] - cost[i]存在负数&#xff0c;那么说明无法从a作…...

聊透多线程编程-线程基础-4.C# Thread 子线程执行完成后通知主线程执行特定动作

在多线程编程中&#xff0c;线程之间的同步和通信是一个常见的需求。例如&#xff0c;我们可能需要一个子线程完成某些任务后通知主线程&#xff0c;并由主线程执行特定的动作。本文将基于一个示例程序&#xff0c;详细讲解如何使用 AutoResetEvent 来实现这种场景。 示例代码…...

C# 组件的使用方法

类 Stopwatch 计算时间 Stopwatch sw new Stopwatch(); sw.Start(); // 要执行的代码块 Thread.Sleep(2000);sw.ElapsedMilliseconds // 消耗时间 Console.WriteLine(sw.ElapsedMilliseconds);组件 ListView 属性设置 外观 - View - Details 行为 - Columns -&#xff08;…...

Python常用排序算法

1. 冒泡排序 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的列表&#xff0c;比较相邻的元素&#xff0c;如果他们的顺序错误就交换他们。 def bubble_sort(arr):# 遍历所有数组元素for i in range(len(arr)):# 最后i个元素是已经排序好的for j in range(0, …...

HTML5 服务器发送事件(Server-Sent Events)

1. 引言 HTML5 服务器发送事件&#xff08;Server-Sent Events&#xff0c;SSE&#xff09;是一种基于 HTTP 的服务器推送技术&#xff0c;允许服务器主动向客户端&#xff08;如浏览器&#xff09;发送实时更新。SSE 适用于单向通信场景&#xff0c;如新闻推送、实时价格更新…...

【C++游戏引擎开发】第12篇:GLSL语法与基础渲染——从管线结构到动态着色器

一、OpenGL渲染管线解密 1.1 OpenGL渲染管线流程图 #mermaid-svg-GrAgLUat95CVZKm0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GrAgLUat95CVZKm0 .error-icon{fill:#552222;}#mermaid-svg-GrAgLUat95CVZKm0 .e…...

阿里云负载均衡可以抗ddos吗

本文深度解析阿里云负载均衡的DDoS防护机制&#xff0c;通过实测数据验证其基础防御能力边界&#xff0c;揭示需结合云盾高防IP实现TB级流量清洗的工程实践。结合2023年Memcached反射攻击事件&#xff0c;提供混合云架构下的多层级防御方案设计指南。 云原生负载均衡的基础防护…...

动手学习:路径规划原理及常用算法

一、路径规划的基本原理 路径规划&#xff08;Path Planning&#xff09;是机器人导航的核心任务&#xff0c;目标是为机器人找到一条从起点到终点的无碰撞路径&#xff0c;同时满足约束条件&#xff08;如最短路径、最优能耗、安全性等&#xff09;。在人形机器人场景中&…...

Web前端性能指标Web3D性能优化

性能指标&评估方式 在Web3D性能优化之前,先了解性能指标&评估方式 前端性能指标评估与监测工具可分为以下几类,结合不同场景和需求,开发者可选择适合的工具进行性能优化: 一、浏览器内置工具 Chrome DevTools Performance 面板:记录运行时性能,分析CPU、内存使…...

Mujoco xml <option>

xml option option总起例子timestep(一般会用到)gravity(一般会用到)windmagneticdensityviscosityo_margino_solref, o_solimpo_frictionintegrator(一般会用到)cone(一般会用到)jacobian(一般会用到)solver(一般会用到)iterations(一般会用到)tolerance(一般会用到)noslip_it…...

如何用 nvm alias default 18.20.8 实现全局 Node.js 版本管理?一篇保姆级指南!!!

&#x1f4dd; 如何用 nvm alias default 18.20.8 实现全局 Node.js 版本管理&#xff1f;一篇保姆级指南 &#x1f680; 1. 核心命令解析 &#x1f50d; nvm alias default 18.20.8 是 nvm 管理工具中用于设置全局默认 Node.js 版本的核心命令。它的作用是将指定版本锁定为所…...

推荐一款Nginx图形化管理工具: NginxWebUI

Nginx Web UI是一款专为Nginx设计的图形化管理工具&#xff0c;旨在简化Nginx的配置与管理过程&#xff0c;提高开发者和系统管理的工作效率。项目地址&#xff1a;https://github.com/cym1102/nginxWebUI 。 一、Nginx WebUI的主要特点 简化配置&#xff1a;通过图形化的界…...

Pytest多环境切换实战:测试框架配置的最佳实践!

你是否也遇到过这种情况&#xff1a;本地测试通过&#xff0c;一到测试环境就翻车&#xff1f;环境变量错乱、接口地址混乱、数据源配置丢失……这些「环境切换」问题简直像定时炸弹&#xff0c;随时引爆你的测试流程&#xff01; 测试人员每天都跟不同的环境打交道&#xff0…...

大模型在网络安全领域的七大应用

1. 高级威胁检测与防御自动化 技术路径&#xff1a; 数据整合&#xff1a;聚合网络流量、终端日志、威胁情报等多源数据&#xff0c;构建多维特征库。行为建模&#xff1a;通过大模型的上下文理解能力&#xff0c;建立正常行为基线&#xff0c;识别偏离模式。动态策略生成&am…...

SpringBoot项目部署之启动脚本

一、启动脚本方案 1. 基础启动方式 1.1 直接运行JAR java -jar your-app.jar --spring.profiles.activeprod优点&#xff1a;简单直接&#xff0c;适合快速测试缺点&#xff1a;终端关闭即终止进程 1.2 后台运行 nohup java -jar your-app.jar > app.log 2>&1 &…...

【spark-submit】--提交任务

Spark-submit spark-submit 是 Apache Spark 提供的用于提交 Spark 应用程序到集群的命令行工具。 基本语法 spark-submit [options] <app-jar> [app-arguments]常用参数说明 应用程序配置 --class <class-name>: 指定应用程序的主类&#xff08;对于 Java/Sc…...

机器学习中的回归与分类模型:线性回归、逻辑回归与多分类

在机器学习领域&#xff0c;回归和分类是两类重要的任务&#xff0c;它们各自有着不同的应用场景和模型构建方式。本文将详细介绍线性回归、逻辑回归以及多分类任务的相关内容&#xff0c;包括数据预处理、模型定义、损失函数的选择以及评估指标的计算。 一、线性回归&#xf…...

spark-rdd

Spark-core RDD转换算子 RDD 根据数据处理方式的不同将算子整体上分为 Value 类型、双 Value 类型和 Key-Value 类型。 Value类型&#xff1a; 1.map 将处理的数据逐条进行映射转换&#xff0c;这里的转换可以是类型的转换&#xff0c;也可以是值的转换 mapPartitions map …...

Python 实现如何电商网站滚动翻页爬取

一、电商网站滚动翻页机制分析 电商网站如亚马逊和淘宝为了提升用户体验&#xff0c;通常采用滚动翻页加载数据的方式。当用户滚动页面到底部时&#xff0c;会触发新的数据加载&#xff0c;而不是一次性将所有数据展示在页面上。这种机制虽然对用户友好&#xff0c;但对爬虫来…...

pytorch TensorDataset与DataLoader类

读取数据 Dataset类 Dataset 是一个读取数据抽象类&#xff0c;所有自定义的数据集类需要继承该类。 该类主要实现以下三个功能 ①如何获取每一个数据及其label --> 抽象方法__getitem()__设置通过对象[索引]的方式获取每一个样本及其label ②告知一共有多少数据 -->…...

AI大模型与知识生态:重构认知的新时代引擎

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:我们如何获得知识,正在被AI彻底改写 从古代图书馆、百科全书,到搜索引擎、问答社区,人类获取知识的方式一直在进化。而随着 ChatGPT、DeepSeek、Grok 等 AI 大模型的到来,这一过程迎来了颠覆…...

Server-Sent Events一种允许服务器向客户端发送实时更新的 Web API

Server-Sent Events&#xff08;SSE&#xff09;是一种允许服务器向客户端发送实时更新的 Web API。它基于 HTTP 协议&#xff0c;提供了一种单向的、服务器到客户端的通信机制&#xff0c;客户端可以通过监听服务器发送的事件来接收实时数据。下面从原理、使用场景、代码示例等…...

电子电器架构 --- AI如何重构汽车产业

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 周末洗了一个澡&#xff0c;换了一身衣服&#xff0c;出了门却不知道去哪儿&#xff0c;不知道去找谁&am…...

操作系统CPU调度

简介 当CPU有大量任务要处理,但由于资源有限,无法同时处理。所有就需要某种规则来决定任务处理的顺序,这就是调度。 调度层次 根据调度频率与层次,共分为三种 高级调度 也称为作业调度(Long-Trem Scheduling),频次很低,它决定哪些进程从外存(硬盘)加载到内存中级调度 也…...

icoding题解排序

数组合并 假设有 n 个长度为 k 的已排好序&#xff08;升序&#xff09;的数组&#xff0c;请设计数据结构和算法&#xff0c;将这 n 个数组合并到一个数组&#xff0c;且各元素按升序排列。即实现函数&#xff1a; void merge_arrays(const int* arr, int n, int k, int* out…...

xHCI 上 USB 读写分析

系列文章目录 xHCI 简单分析 USB Root Hub 分析 USB Hub 检测设备 usb host 驱动之 urb xHCI那些事儿 PCIe MMIO、DMA、TLP PCIe配置空间与CPU访问机制 PCIe总线协议基础实战 文章目录 系列文章目录一、xHCI 初始化二、xHCI 驱动识别根集线器&#xff08;RootHub&#xff09;…...

SpringCloud Alibaba 之分布式全局事务 Seata 原理分析

1. 什么是 Seata&#xff1f;为什么需要它&#xff1f; 想象一下&#xff0c;你去银行转账&#xff1a; 操作1&#xff1a;从你的账户扣款 1000 元操作2&#xff1a;向对方账户增加 1000 元 如果 操作1 成功&#xff0c;但 操作2 失败了&#xff0c;你的钱就凭空消失了&…...

《C语言中的“魔法盒子”:自定义函数的奇妙之旅》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、引言二、自定义函数的创建&#xff08;一&#xff09;基本结构&#xff08;二&#xff09;一个简单的例子 三、自定义函数的使用&#xff08;一&#xf…...

【Spring】IoC 和 DI的关系、简单使用,从“硬编码“到“优雅解耦“:IoC与DI的Spring蜕变之旅

1.IoC 和 DI的关系 IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;和DI&#xff08;Dependency Injection&#xff0c;依赖注入&#xff09;是Spring框架中紧密相关但又有所区别的两个概念。理解它们的联系&#xff0c;可以帮助我们更深刻地掌握Spring…...

43、RESTful API 保姆教程

RESTful API 目录 RESTful API简介RESTful设计原则RESTful设计规范RESTful统一返回体JAX-RSJAX-RS与SpringBoot集成构建Restful服务实践总结一、RESTful API 简介 REST(Representational State Transfer)是一种基于HTTP的web服务架构风格,RESTful API则是遵循REST原则的网…...

ASP.NET Core 性能优化:客户端响应缓存

文章目录 前言一、什么是缓存二、客户端缓存核心机制&#xff1a;HTTP缓存头1&#xff09;使用[ResponseCache]属性&#xff08;推荐&#xff09;2&#xff09;预定义缓存配置&#xff08;CacheProfile&#xff09;3&#xff09;手动设置HTTP头4&#xff09;缓存验证机制&#…...

算法导论(递归回溯)——递归

算法思路&#xff08;21&#xff09; 递归函数的含义&#xff1a; 创建一个递归函数&#xff0c;该函数接受两个链表的头结点作为输入&#xff0c;返回合并后的链表的头结点。 选择较小的节点&#xff1a; 在函数体内&#xff0c;首先比较两个链表的头结点的值&#xff0c;选择…...

从接口400ms到20ms,记录一次JVM、MySQL、Redis的混合双打

​​1. 场景&#xff1a;促销活动的崩溃​​ 接到报警短信&#xff0c;核心接口响应时间突破​​5秒​​&#xff0c;DB CPU飙到100%。 用Arthas抓取线上火焰图后发现&#xff1a; ---[ 4763ms ] com.example.service.OrderService.createOrder() |---[ 98% ] com.example.m…...

Excel通过VBA脚本去除重复数据行并保存

一、方法1:使用字典动态去重并保存 适用场景&#xff1a;需要灵活控制去重逻辑&#xff08;如保留最后一次出现的重复项&#xff09;时 Sub 动态去重保存到新表()Dim srcSheet As Worksheet, destSheet As WorksheetDim dict As Object, lastRow As Long, i As LongDim key A…...

Mysql表的操作(2)

1.去重 select distinct 列名 from 表名 2.查询时排序 select 列名 from 表名 order by 列名 asc/desc; 不影响数据库里面的数据 错误样例 &#xff1a; 但结果却有点出乎意料了~为什么会失败呢&#xff1f; 其实这是因为书写的形式不对&#xff0c;如果带了引号&#xff0c;…...

#Linux内存管理# 在ARM32系统中,页表是如何映射的?在ARM64系统中,页表又是如何映射的?

一、ARM32系统页表映射 1. 层级结构与地址划分 默认实现&#xff1a;采用两层映射&#xff08;PGD→PTE&#xff09;&#xff0c;合并Linux标准三级模型中的PMD层。 虚拟地址解析&#xff08;以4KB页为例&#xff09;&#xff1a; Bits[31:20]&#xff1a;一级页表&#xff08;…...

prometheus整合jmx_exporter 使用jmx_exporter监控Kafka

docker-compose部署kafka集群&#xff1b;单节点单zk-CSDN博客 springboot整合kafka&#xff1b;docker部署kafka-CSDN博客 kafka使用SSL加密和认证--todo_ssl.truststore.location-CSDN博客 version: 3.8services:zookeeper1:image: zookeeper:3.9.1container_name: zook…...

深度学习实战:从零构建图像分类API(Flask/FastAPI版)

引言&#xff1a;AI时代的图像分类需求 在智能时代&#xff0c;图像分类技术已渗透到医疗影像分析、自动驾驶、工业质检等各个领域。作为开发者&#xff0c;掌握如何将深度学习模型封装为API服务&#xff0c;是实现技术落地的关键一步。本文将手把手教你使用Python生态中的Fla…...

Kafka实现延迟消息

Kafka 实现延迟消息 Kafka 本身不支持原生的延迟消息&#xff08;不像 RocketMQ 内置了延迟队列&#xff09;&#xff0c;但可以通过多种方式来实现延迟消息。常见的方案如下&#xff1a; 1. 使用不同的 Topic 分区&#xff08;最常见&#xff09; 思路&#xff1a; 创建多…...

大数据(7.2)Kafka万亿级数据洪流下的架构优化实战:从参数调优到集群治理

目录 一、海量数据场景下的性能之殇1.1 互联网企业的数据增长曲线1.2 典型性能瓶颈分析 二、生产者端极致优化2.1 批量发送黄金法则2.1.1 分区选择算法对比 2.2 序列化性能突破 三、消费者端并发艺术3.1 多线程消费模式演进3.1.1 消费组Rebalance优化 3.2 位移管理高阶技巧 四、…...

要查看 FAISS 使用的 OpenMP 版本,需根据安装方式和系统环境采用不同方法。以下是具体步骤和原理分析:

要查看 FAISS 使用的 OpenMP 版本&#xff0c;需根据安装方式和系统环境采用不同方法。以下是具体步骤和原理分析&#xff1a; 方法 1&#xff1a;通过库文件名称直接查看&#xff08;推荐&#xff09; FAISS 的 OpenMP 版本通常直接体现在其依赖的动态链接库&#xff08;DLL/…...

AI 大模型的标准化工具箱MCP (Model Context Protocol)

MCP简介 MCP &#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;定义了应用程序和 AI 模型之间交换上下文信息的方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型&#xff08;一个中间协议层&#xff09;&#xff0c;就像 …...

哈希表的封装

目录 引入 哈希表封装 修改哈希表参数 修改哈希表成员 修改%时使用的变量 修改读取时获得的变量 迭代器的实现 迭代器的定义 迭代器 迭代器*解引用 迭代器->成员访问 迭代器重载和! 封装迭代器 HashTable迭代器封装 非const版本 const版本 unordered_set迭…...

2025年认证杯数模竞赛赛题浅析-快速选题

赛题浅析 认证杯作为国内最早的数学建模论坛、唯一一个全部公开参赛论文的竞赛、国内最大的数学建模竞赛之一、唯一一个对非学生群里开放的数学建模竞赛、国内唯二的支持高中生参赛的大学生数模竞赛。在数模界一直被视为国赛之前较好的练手赛&#xff0c;本文将初步简略得介绍…...

【网络安全】Linux 常见命令

未经许可,不得转载。 文章目录 正文系统信息查看用户与权限管理进程管理网络配置与检测文件操作日志查看与分析权限审计与安全检测正文 在网络安全工作中,熟练掌握 Linux 系统中的常用命令,对于日常运维、日志分析、安全排查等工作至关重要。 以下为常用命令汇总,供参考。…...

电脑卡顿严重怎么办 电脑卡顿的处理指南

电脑突然卡顿比较严重&#xff0c;这是很多用户都曾经遇到过的问题&#xff0c;鼠标一直转圈圈&#xff0c;无法进行任何操作。电脑卡顿&#xff0c;电脑卡顿不仅会降低工作效率&#xff0c;还可能导致数据丢失&#xff0c;数据无法保存。很多用户解决电脑卡顿的方法就是直接一…...

山东大学软件学院创新项目实训开发日志(9)之测试前后端连接

在正式开始前后端功能开发前&#xff0c;在队友的帮助下&#xff0c;成功完成了前后端测试连接&#xff1a; 首先在后端编写一个测试相应程序&#xff1a; 然后在前端创建vue 并且在index.js中添加一下元素&#xff1a; 然后进行测试&#xff0c;测试成功&#xff1a; 后续可…...

H.264 NVMPI解码性能优化策略

H.264 NVMPI解码性能优化策略‌ ‌1. 硬件与驱动配置‌ ‌JetPack版本匹配‌&#xff1a;确保NVIDIA Jetson设备的JetPack SDK版本与CUDA驱动兼容&#xff0c;避免因驱动不匹配导致硬件解码性能下降‌8。‌显存分配优化‌&#xff1a;调整FFmpeg的-hwaccel_device参数指定GPU…...

汽车软件开发常用的需求管理工具汇总

目录 往期推荐 DOORS&#xff08;IBM &#xff09; 行业应用企业&#xff1a; 应用背景&#xff1a; 主要特点&#xff1a; Polarion ALM&#xff08;Siemens&#xff09; 行业应用企业&#xff1a; 应用背景&#xff1a; 主要特点&#xff1a; Codebeamer ALM&#x…...

如何从零构建一个自己的 CentOS 基础镜像

如何从零构建一个自己的 CentOS 基础镜像 从零构建一个基于 CentOS 的基础镜像是一个很好的实践&#xff0c;可以帮助你理解 Docker 镜像的底层原理。以下是以 CentOS 为例&#xff0c;从零开始&#xff08;不依赖现有镜像&#xff09;构建基础镜像的详细步骤。我们将使用 yum…...