Kimi LeetCode LCP 43. 十字路口的交通 Java实现

发布时间:2026/10/17 1:37:27

Kimi    LeetCode LCP 43. 十字路口的交通 Java实现 以下是 LCP 43. 十字路口的交通 的 Java 实现。题目分析- directions 长度为 4按 东、南、西、北 顺序记录各方向车辆从最靠近路口到最远离路口。- 每辆车通过路口恰好需要 1 秒。- 每秒交警可以指挥多个方向最靠近路口的车同时出发但必须满足1. 同一方向每秒只能驶出一辆车2. 同一方向每秒只能驶入一辆车3. 同一秒内车辆行驶路线不可相交。- 求所有车辆通过的最少秒数。算法思路四维动态规划 子集枚举1. 方向归一化将绝对方向E/S/W/N转换为相对方向L左转、R右转、S直行这样四个方向可以用统一的冲突规则判断。2. 状态定义dp[x0][x1][x2][x3] 表示四个方向分别还剩余 x0, x1, x2, x3 辆车时的最少秒数。3. 状态转移对于每个状态枚举当前所有还有车的方向的非空子集 mask用位运算快速枚举判断选中的车辆之间是否有冲突。若无冲突则这些车可以在同一秒内通过状态转移到剩余车辆更少的状态。4. 冲突检测根据相对方向判断选中车辆的行驶路线是否相交或驶入同一目标车道。Java 实现javaimport java.util.Arrays;class Solution {private char[][] dir;private int[] len;public int trafficCommand(String[] directions) {len new int[4];for (int i 0; i 4; i) {len[i] directions[i].length();}// 归一化将绝对方向 E/S/W/N 转为相对方向 L/R/Sdir new char[4][];for (int i 0; i 4; i) {dir[i] new char[len[i]];}// 东边来车(0): S-左转, N-右转, W-直行for (int t 0; t len[0]; t) {char c directions[0].charAt(t);dir[0][t] (c S) ? L : ((c N) ? R : S);}// 南边来车(1): W-左转, E-右转, N-直行for (int t 0; t len[1]; t) {char c directions[1].charAt(t);dir[1][t] (c W) ? L : ((c E) ? R : S);}// 西边来车(2): N-左转, S-右转, E-直行for (int t 0; t len[2]; t) {char c directions[2].charAt(t);dir[2][t] (c N) ? L : ((c S) ? R : S);}// 北边来车(3): E-左转, W-右转, S-直行for (int t 0; t len[3]; t) {char c directions[3].charAt(t);dir[3][t] (c E) ? L : ((c W) ? R : S);}int size0 len[0] 1, size1 len[1] 1;int size2 len[2] 1, size3 len[3] 1;int[][][][] dp new int[size0][size1][size2][size3];int INF Integer.MAX_VALUE / 2;for (int i 0; i size0; i) {for (int j 0; j size1; j) {for (int k 0; k size2; k) {Arrays.fill(dp[i][j][k], INF);}}}dp[0][0][0][0] 0;int[] x new int[4], y new int[4], index new int[4];for (x[0] 0; x[0] size0; x[0]) {index[0] len[0] - x[0];for (x[1] 0; x[1] size1; x[1]) {index[1] len[1] - x[1];for (x[2] 0; x[2] size2; x[2]) {index[2] len[2] - x[2];for (x[3] 0; x[3] size3; x[3]) {index[3] len[3] - x[3];int t (x[0] 0 ? 1 : 0) | (x[1] 0 ? 2 : 0)| (x[2] 0 ? 4 : 0) | (x[3] 0 ? 8 : 0);for (int mask t; mask 0; mask (mask - 1) t) {if (!checkConflict(index, mask)) {y[0] ((mask 1) ! 0) ? x[0] - 1 : x[0];y[1] ((mask 2) ! 0) ? x[1] - 1 : x[1];y[2] ((mask 4) ! 0) ? x[2] - 1 : x[2];y[3] ((mask 8) ! 0) ? x[3] - 1 : x[3];dp[x[0]][x[1]][x[2]][x[3]] Math.min(dp[x[0]][x[1]][x[2]][x[3]],1 dp[y[0]][y[1]][y[2]][y[3]]);}}}}}}int result dp[len[0]][len[1]][len[2]][len[3]];return result INF ? len[0] len[1] len[2] len[3] : result;}private boolean checkConflict(int[] index, int mask) {for (int x 0; (1 x) mask; x) {if ((mask (1 x)) ! 0) {int left (x 1) 0x03;int straight (x 2) 0x03;int right (x 3) 0x03;char action dir[x][index[x]];if (action L) {if (((mask (1 left)) ! 0 (dir[left][index[left]] S || dir[left][index[left]] L)) ||((mask (1 straight)) ! 0 (dir[straight][index[straight]] S || dir[straight][index[straight]] R)) ||((mask (1 right)) ! 0 (dir[right][index[right]] S || dir[right][index[right]] L))) {return true;}} else if (action S) {if (((mask (1 left)) ! 0 (dir[left][index[left]] S || dir[left][index[left]] L)) ||((mask (1 straight)) ! 0 dir[straight][index[straight]] L) ||((mask (1 right)) ! 0)) {return true;}} else {if (((mask (1 left)) ! 0 dir[left][index[left]] S) ||((mask (1 straight)) ! 0 dir[straight][index[straight]] L)) {return true;}}}}return false;}}复杂度分析- 时间复杂度O(len0 × len1 × len2 × len3 × 2^4)其中 leni ≤ 20最大状态数约为 21^4 × 16 ≈ 310万在可接受范围内。- 空间复杂度O(len0 × len1 × len2 × len3)最大约 21^4 ≈ 19.4万 个整数。下载完整代码[Solution.java](sandbox:///mnt/agents/output/Solution.java)
延伸阅读

更多相关文章

2026/10/14 21:09:27

基于SpringBoot的旅游出行指南系统毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/10/16 3:23:48

宇树219倍市盈率:5万台人形机器人的分水岭

2026年8月,中国厂商拿下了全球人形机器人出货量的97%。彭博社数据显示,上半年全球出货约1.91万台,智元机器人8400台居首,宇树科技5900台紧随其后。与此同时,宇树科技以150.8美元/股的发行价启动科创板申购,…

2026/10/15 15:18:04

企业架构的六种场景:从“四大流派”到数字原生与 AI 原生

前几天读到陈果老师的《企业架构的中国实践:四大流派与本质回归》,“四种流派”这个标题确实很吸引人。文章把国内的 EA 实践归为四类:原教旨主义 TOGAF 派、金融机构派、华为派与学华为派、实用价值派,并以“回归 EA 作为战略沟通…

2026/10/17 4:19:50

QQ群名片批量采集的风险与合规替代方案,社群运营必读

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 4:19:50

OpenCV像素级逻辑运算:掩膜驱动的图像空间决策原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 4:19:50

停车场车位识别:多模态工程落地的四大断层

1. 为什么“停车场车位识别”不是个简单的小功能,而是一道典型的多模态工程题“停车场车位识别(一)”这个标题看起来平平无奇,甚至有点像某门课程实验的作业编号。但我在某高校智能交通实验室带过三届本科生项目,也帮两…

2026/10/17 4:19:50

统一搜索与AI助手:构建团队知识索引的架构与落地实践

1. 为什么现代团队需要统一搜索和AI助手工作节奏越来越快的今天,"信息分散"成了团队协作最大的隐形杀手。文件散落在各个云盘、知识库、项目管理系统、IM聊天记录里,找一份合同要翻三个软件,查一个客户背景要开五个标签页&#xff…

2026/10/17 4:14:50

AI驱动的企业数字孪生:从仿真复现到决策优化

1. 为什么企业数字孪生必须叠加AI:传统仿真模型的三个死穴前两年我在一家制造企业做产线仿真项目,当时用传统数字孪生工具给车间搭了一个高精度三维模型,设备运动逻辑、节拍、缓存区全都对上了,模型跑起来跟现场监控画面几乎一帧不…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/17 0:04:32

PlanarSLAM:面向曼哈顿世界的点线面联合SLAM系统

简介:本资源是面向机器人视觉与SLAM研究者的C开源RGB-D SLAM系统实现,专为结构化室内场景(如办公室、走廊)设计,通过融合点、线、平面三类几何特征并引入“曼哈顿世界”假设,显著提升位姿跟踪鲁棒性与稠密地…

2026/10/17 0:04:32

TDH Workflow调度实战:从DAG依赖驱动到任务编排与故障排查

1. 从一个调度脚本说起:TDH Workflow到底在解决什么问题第一次接触TDH的Workflow,是在一个数据清洗项目里。当时团队每天要跑几十个ETL任务,任务之间有严格的先后依赖——A表清洗完才能跑B表的关联,B表跑完才能触发C表的聚合。最开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑