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

LeetCode 399. Evaluate Division 题解

LeetCode 399. Evaluate Division 题解

题目描述

给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。

另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。

返回所有问题的答案。如果存在某个无法确定的答案,则用 -1.0 替代这个答案。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用 -1.0 替代这个答案。

示例 1:

输入:equations = [["a","b"],["b","c"]], values = [2.0,3.0], queries = [["a","c"],["b","a"],["a","e"],["a","a"],["x","x"]] 输出:[6.00000,0.50000,-1.00000,1.00000,-1.00000] 解释: a / b = 2.0, b / c = 3.0 所以 a / c = 6.0, b / a = 0.5, 等等

解题思路

将问题建模为图:

  • 每个变量是一个节点
  • a / b = 2.0 表示从 a 到 b 有一条权重为 2.0 的边,从 b 到 a 有一条权重为 0.5 的边
  • 查询转化为求图中两点之间的路径权重乘积

代码实现

from collections import defaultdict, deque def calcEquation(equations, values, queries): # 构建图 graph = defaultdict(list) for (a, b), value in zip(equations, values): graph[a].append((b, value)) graph[b].append((a, 1.0 / value)) def bfs(start, end): if start not in graph or end not in graph: return -1.0 if start == end: return 1.0 queue = deque([(start, 1.0)]) visited = {start} while queue: node, curr_value = queue.popleft() for neighbor, weight in graph[node]: if neighbor == end: return curr_value * weight if neighbor not in visited: visited.add(neighbor) queue.append((neighbor, curr_value * weight)) return -1.0 return [bfs(c, d) for c, d in queries]

复杂度分析

  • 时间复杂度:O(Q × (V + E)),Q 是查询数量
  • 空间复杂度:O(V + E)

总结

本题展示了如何将数学问题转化为图论问题。

关键点:

  • 将除法关系建模为带权图
  • 查询转化为路径搜索
  • 使用 BFS 或 DFS 求解
http://www.cnnetsun.cn/news/1560906.html

相关文章:

  • 如何通过梯度累积步数优化显存受限下的训练批次大小?
  • 最近在研究COMSOL的瓦斯抽采数值模拟,发现这玩意儿真的挺有意思。尤其是煤体变形和瓦斯抽采的耦合问题,简直是个大坑,但跳进去之后发现还挺有挑战性的
  • vscode连接ssh后codex登录问题
  • Pandas第二章 基础
  • openGauss数据库设计实战:PowerDesigner E-R建模与正向工程全解析
  • 离散状态观测器
  • 安装ROS2,亲测有效
  • FlashAI:推动AI技术民主化的零门槛部署方案
  • Display Driver Uninstaller完整使用指南:彻底解决显卡驱动问题的终极方案 [特殊字符]
  • 5分钟解锁联想拯救者BIOS隐藏选项:终极免费工具完全指南
  • 使用PyInstaller打包yz-女生-角色扮演-造相Z-Turbo模型为可执行文件
  • 小程序毕业设计基于微信小程序的桃李园速修系统
  • ENSP实战:从零构建企业级WLAN网络
  • 从键盘到单片机:编码器(如74LS147)在嵌入式系统里到底怎么用?一个实例讲透
  • 从CAJ到PDF:解密学术文献格式转换的魔法工具
  • OpenClaw模型量化实践:nanobot镜像8bit压缩Qwen3-4B效果对比
  • Snippet Box:重新定义你的个人代码知识库管理体验
  • 2026年物流托盘工厂揭秘:智能生产如何重塑供应链新格局
  • Android动态分区空间管理实战:从源码配置到终端查询
  • Reachy Mini:开源桌面机器人的完整指南与核心技术解析
  • Learn Claude Code Agent 开发 | 2、插拔式工具系统:扩展功能不修改核心循环
  • 小产后吃什么恢复快?科学修护助力身体回归健康
  • 小程序毕业设计基于微信小程序的生日福利管理系统
  • Windows Cleaner:终极免费解决方案,5分钟彻底解决C盘爆红问题
  • 搜维尔科技:捕捉·训练·扩展·Xsens人形机器人解决方案
  • 高效掌握Mermaid零代码图表工具实战指南:3大核心场景+5个进阶技巧
  • LeaguePrank:英雄联盟个性化展示的安全合规解决方案
  • Qwen2.5-1.5B本地化AI助手效果:实时纠错‘我昨天去北京了’→‘我昨天去了北京’语法修正
  • Qwen3.5-4B-Claude-Opus惊艳效果展示:复杂逻辑题的结构化分析输出
  • PyKitti实战指南:多传感器数据处理如何解决自动驾驶开发者的数据解析痛点