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

【打卡】车厢重排

buffers = [deque() for _ in range(k)]
next_carriage = 1
out = [] 
  • 创建k个空的缓冲轨道(双端队列)
  • next_carriage变量跟踪当前需要输出的车厢编号(从 1 开始)
  • out列表记录最终输出的车厢原始索引
for i, carriage in enumerate(carriages):if carriage == next_carriage:# 直接输出out.append(i)next_carriage += 1# 检查缓冲轨道中是否有可以输出的车厢while True:moved = Falsefor buffer in buffers:if buffer and buffer[0] == next_carriage:out.append(carriages.index(buffer.popleft()))next_carriage += 1moved = Trueif not moved:breakelse:# 寻找合适的缓冲轨道valid_buffer = Nonemax_tail = -1for j, buffer in enumerate(buffers):if not buffer or buffer[-1] < carriage:if buffer and buffer[-1] > max_tail:valid_buffer = jmax_tail = buffer[-1]elif not buffer and valid_buffer is None:valid_buffer = jif valid_buffer is not None:buffers[valid_buffer].append(carriage)else:return "错误:任务不可能完成。"
  • 如果当前车厢编号恰好是下一个需要输出的(next_carriage),则直接输出
  • 输出后,检查所有缓冲轨道的头部,看是否有下一个需要的车厢
  • 如果当前车厢不能直接输出,则尝试将其放入合适的缓冲轨道:
    • 优先选择尾部车厢编号最大且小于当前车厢编号的轨道
    • 如果没有这样的轨道,则选择一个空轨道
    • 如果没有合适的轨道,则任务无法完成
while next_carriage <= n:moved = Falsefor buffer in buffers:if buffer and buffer[0] == next_carriage:out.append(carriages.index(buffer.popleft()))next_carriage += 1moved = Trueif not moved:return "错误:任务不可能完成。"
  • 遍历完所有输入车厢后,检查缓冲轨道中是否还有剩余车厢需要输出
  • 如果无法按顺序输出所有车厢,则任务失败

体会:

完成这道铁路车厢重排问题的代码实现,让我对贪心算法和数据结构的应用有了更深刻的理解。核心难点在于如何合理利用有限的缓冲轨道(栈结构)调度车厢顺序,其中 “选择尾部最大且小于当前车厢的轨道” 这一贪心策略是解题关键,它通过局部最优选择确保全局可行解,体现了贪心算法的典型思维。

过程中需要反复验证车厢能否直接输出或入栈,同时处理边界情况(如轨道为空或无合适轨道时的判断),这锻炼了逻辑的严密性。例如,遍历输入时需即时检查缓冲轨道头部是否有可输出车厢,避免遗漏连续顺序的情况,这一步的循环设计需仔细权衡终止条件。

http://www.xdnf.cn/news/8255.html

相关文章:

  • java后端-海外登录(谷歌/FaceBook/苹果)
  • 汽配知识(四)不同车型与区域市场的分类差异
  • 率先实现混合搜索:使用 Elasticsearch 和 Semantic Kernel
  • Java IO流完全解析:从基础到高级应用
  • Vue.js教学第十一章:VueRouter实战指南
  • 在 Matter.js 物理引擎中,isSensor 布尔属性的使用
  • MySQL 数据库表结构修改与字段添加
  • C++:关联容器set容器,multiset容器
  • 【Python】开发工具uv
  • KS107BG型超声体模的结构及性能
  • Pinia持久化存储插件, 持久化存储插件安装(超详细教程)
  • 【KWDB 2025 创作者计划】_KWDB时序数据库特性及跨模查询
  • 使用 vip 加入两台 master 节点
  • 【AI模型学习】上/下采样
  • 【SpringBoot实战指南】使用 Spring Cache
  • 5.22 打卡
  • 生存资料的多因素分析,如果满 足等比例风险假定, 采用Cox回归; 如果不满足等比例风险假定,则考虑采用 非等比例Cox回归分析研究预后因素的影响
  • Java版本的VPN(wlcn)
  • 我的世界模组开发——物理学(1)
  • PiliPlus 非常好用的开源软件第三方B站哔哩哔哩 v1.1.3.35
  • Vue 3.0中异步组件defineAsyncComponent
  • JC/T 2387-2024 改性聚苯乙烯泡沫(EPS)复合装饰制品检测
  • 从零基础到最佳实践:Vue.js 系列(10/10):《实战项目——从零到上线》
  • 2025淘宝最新DSR评分计算方式
  • Python RSA加解密脚本
  • AI相关的笔记
  • (第93天)OGG 搭建 Oracle 19C 数据同步 - 远程部署
  • 博奥龙Nanoantibody系列IP专用抗体
  • ubuntu安装blender并配置应用程序图标
  • HW云RDS性能压测