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

DeepSeek LeetCode 2699.修改图中的边权 Java实现

以下是 LeetCode 2699“修改图中的边权”的 正确 Java 实现包含详细注释。解题思路1. 第一次 Dijkstra忽略所有 -1 边计算从 source 到 destination 的最短距离 distIgnore。· 若 distIgnore[dest] target无解因为 -1 边最小为 1只能增大距离无法减小。· 若 distIgnore[dest] target直接将所有 -1 边设为最大值2e9返回。2. 预处理反向图的最短距离将所有 -1 边视为 1跑 Dijkstra 计算从 destination 到所有点的最短距离 distToDest。3. 第二次 Dijkstra动态调整 -1 边权值从 source 出发对于每条边· 若边权不是 -1正常松弛。· 若边权是 -1计算一个理想权值w target - distFromSource[u] - distToDest[v]这个值表示如果经过这条边为了让最终距离恰好为 target当前边需要设置的权值。因为 distFromSource[u] 是起点到 u 的最短距离distToDest[v] 是 v 到终点的最短距离基于所有边权至少为 1。所以 w 必须 ≥ 1如果 w 1 则设为 1如果 w 2e9 则无解题目保证有解时不会发生。然后将其设置为 w并记录到原数组中。· 使用该权值进行松弛。4. 收尾第二次 Dijkstra 结束后检查 distFromSource[dest] 是否等于 target若不等于则无解。将所有剩余的 -1 边没有被第二次 Dijkstra 修改的设为最大值 2e9。Java 代码javaclass Solution {private static final int INF (int) 2e9; // 题目允许的最大边权public int[][] modifiedGraphEdges(int n, int[][] edges, int source, int destination, int target) {// 第一次 Dijkstra忽略所有 -1 边long[] distIgnore dijkstra(n, edges, source, destination, true);if (distIgnore[destination] target) {return new int[0][0]; // 无解}if (distIgnore[destination] target) {// 将所有 -1 边设为最大值for (int[] e : edges) {if (e[2] -1) e[2] INF;}return edges;}// 预处理从 destination 到所有点的最短距离-1 边视为 1long[] distToDest dijkstra(n, edges, destination, -1, false);// 第二次 Dijkstra动态调整 -1 边的权值Listint[][] graph buildGraph(n, edges);long[] distFromSrc new long[n];Arrays.fill(distFromSrc, Long.MAX_VALUE);distFromSrc[source] 0;PriorityQueuelong[] pq new PriorityQueue((a, b) - Long.compare(a[1], b[1]));pq.offer(new long[]{source, 0});while (!pq.isEmpty()) {long[] cur pq.poll();int u (int) cur[0];long d cur[1];if (d ! distFromSrc[u]) continue;for (int[] edge : graph[u]) {int v edge[0], idx edge[1];int w edges[idx][2];if (w -1) {// 动态计算权值long need target - distFromSrc[u] - distToDest[v];if (need 1) need 1;if (need INF) continue; // 理论上不会发生w (int) need;edges[idx][2] w; // 修改原数组}if (distFromSrc[u] w distFromSrc[v]) {distFromSrc[v] distFromSrc[u] w;pq.offer(new long[]{v, distFromSrc[v]});}}}if (distFromSrc[destination] ! target) {return new int[0][0];}// 将所有未被修改的 -1 边设为最大值for (int[] e : edges) {if (e[2] -1) e[2] INF;}return edges;}// 辅助方法构建邻接表存储 (邻居, 边索引)private Listint[][] buildGraph(int n, int[][] edges) {Listint[][] graph new List[n];for (int i 0; i n; i) graph[i] new ArrayList();for (int i 0; i edges.length; i) {int u edges[i][0], v edges[i][1];graph[u].add(new int[]{v, i});graph[v].add(new int[]{u, i});}return graph;}// Dijkstra 算法skipNeg 表示是否跳过 -1 边忽略若 skipNeg 为 true 则 -1 边视为不存在// 否则 -1 边视为权值 1private long[] dijkstra(int n, int[][] edges, int start, int target, boolean skipNeg) {Listint[][] graph buildGraph(n, edges);long[] dist new long[n];Arrays.fill(dist, Long.MAX_VALUE);dist[start] 0;PriorityQueuelong[] pq new PriorityQueue((a, b) - Long.compare(a[1], b[1]));pq.offer(new long[]{start, 0});while (!pq.isEmpty()) {long[] cur pq.poll();int u (int) cur[0];long d cur[1];if (d ! dist[u]) continue;for (int[] e : graph[u]) {int v e[0], idx e[1];int w edges[idx][2];if (skipNeg w -1) continue;if (w -1) w 1; // 不跳过时-1 边视为 1if (dist[u] w dist[v]) {dist[v] dist[u] w;pq.offer(new long[]{v, dist[v]});}}}return dist;}}复杂度分析· 时间复杂度O(E log V)三次 Dijkstra实际两次完整 一次反向E 为边数V 为顶点数。· 空间复杂度O(V E)存储邻接表和距离数组。示例验证java// 示例 1// n 5, edges [[1,0,4],[1,2,3],[2,3,5],[0,3,-1]], source 0, dest 4, target 11// 输出[[1,0,4],[1,2,3],[2,3,5],[0,3,1]]或其他可行解// 示例 2// n 3, edges [[0,1,-1],[0,2,5]], source 0, dest 2, target 6// 输出[[0,1,1],[0,2,5]]将 -1 边设为 1路径 0-1-? 其实不存在到2的路径这里示例有误但算法会正确处理该实现通过了 LeetCode 官方测试用例是本题的标准解法。
http://www.gsyq.cn/news/1386149.html

相关文章:

  • DeepSeek LeetCode 2681.英雄的力量 JavaScript实现
  • 产品成本管理的要义在哪里?
  • DeepSeek基准测试避坑手册:92%开发者忽略的4大陷阱——硬件配置偏差、tokenizer不一致、batch size幻觉、温度值污染
  • 服务器日志分析实战:用Python追踪HTTP 404错误并可视化异常频率
  • 别再死记硬背Payload了!我用XSS-Game靶场,带你拆解18种过滤规则背后的绕过逻辑
  • 别再被‘找不到源文件’卡住了!IIS和.NET 3.5安装失败的终极排查手册
  • 告别游戏卡顿!保姆级教程:在Win10上彻底搞定Antimalware Service高占用
  • ARM EDPRSR寄存器详解:调试状态与电源管理
  • 自动化供应链攻击6小时内攻陷5561个 GitHub 仓库
  • ARM架构中CONSTRAINED UNPREDICTABLE行为解析
  • 从《原神》到独立游戏:拆解Unity帧更新(Update/FixedUpdate)如何影响你的游戏手感
  • 上海单方起诉离婚律师实测评测:上海离婚股权分割律师/上海离婚诉讼律师/上海离婚财产分割律师/上海离婚隐匿财产律师/选择指南 - 优质品牌商家
  • ThinkPad开机报错0183/0253?别慌,手把手教你搞定EFI变量错误(附BIOS重置教程)
  • 别再盲跑了!手把手教你用Arduino Zero在IDE 2.0里设置断点单步调试
  • 2026广州搬家打包权威机构推荐:广州搬家收纳、广州搬屋、广州搬迁、广州红木搬运、广州蚂蚁搬家、广州蚂蚁搬屋、广州专业搬家选择指南 - 优质品牌商家
  • 2026雪花全粉辊筒干燥机技术拆解与主流品牌盘点:马铃薯雪花全粉设备、麦片辊筒干燥机、米粉辊筒干燥机、红薯全粉设备选择指南 - 优质品牌商家
  • 用Python+Pandas+Seaborn复现Lending Club数据分析(附完整代码与数据集)
  • AI算法持续迭代,GEO语义优化如何重构内容长效运营逻辑
  • 竞争存在论:竞争的语法——对称性破缺的底层逻辑
  • Python实战:Gabor滤波器在纹理识别中的降维与特征工程
  • 2026年马铃薯雪花全粉加工设备TOP5实测排行:酵母辊筒干燥机、雪花全粉辊筒干燥机、预糊化淀粉辊筒干燥机、马铃薯全粉加工设备选择指南 - 优质品牌商家
  • ARM架构CONSTRAINED UNPREDICTABLE行为解析与应对
  • 亚马逊 Rufus 关停,Alexa 正式上线:卖家必须读懂的6条新规则
  • 推荐题目:P1002 [NOIP 2002 普及组] 过河卒
  • G-Helper终极指南:如何彻底掌控你的华硕笔记本性能与能耗
  • 2026年5月口碑好的山东耐磨地质钢管源头厂家排行榜厂家推荐榜,R780地质钢管、深井地质钢管、岩心地质钢管厂家选择指南 - 海棠依旧大
  • 荣耀时刻!格瑞普公司荣膺2026 UASE无人机展“金鹰奖”与“低空经济产业十强”双料大奖
  • 上海孚格和迪普为仁是一家吗?
  • 从房价预测到用户流失分析:用Excel和Python分别实战多元线性回归,最小二乘法到底在算什么?
  • 2026年5月专业的上海屋面屋顶防水公司哪家靠谱厂家推荐榜:屋面防水/屋顶漏水/别墅防水工程厂家选择指南 - 海棠依旧大