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

力扣面试150题--除法求值

Day 62

题目描述

在这里插入图片描述

做法

此题本质是一个图论问题,对于两个字母相除是否存在值,其实就是判断,从一个字母能否通过其他字母到达,做法如下:

  1. 遍历所有等式,为每个变量分配唯一的整数索引。
  2. 初始化一个二维数组 graph,其中 graph[i][j] 表示变量 i 除以变量 j 的比值。
  3. 对于每个等式 a/b = v,设置 graph[a][b] = v 和 graph[b][a] = 1/v。
  4. 每个变量自身的比值为 1.0,即 graph[i][i] = 1.0。
  5. 对于每个查询 a/b,检查变量是否存在于映射中。如果存在,使用 DFS 查找从 a 到 b 的路径,并计算路径上的比值乘积。如果路径不存在,返回 -1.0。
class Solution {public double find(double[][] graph, int x, int y, boolean[] visited) {//判断x到y是否可达if (graph[x][y] != 0) {return graph[x][y];//直接可达}visited[x] = true;for (int i = 0; i < graph.length; i++) {if (graph[x][i] != 0 && !visited[i]) {double p = find(graph, i, y, visited);if (p != 0.0) {return p * graph[x][i];}}}return 0;}public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {Map<String, Integer> num = new HashMap<>();//字符串到数字序号的转换int x = 0, y = 0;String a, b;for (int i = 0; i < equations.size(); i++) {a = equations.get(i).get(0);b = equations.get(i).get(1);if (!num.containsKey(a)) {num.put(a, x);x++;}if (!num.containsKey(b)) {num.put(b, x);x++;}}double[][] graph = new double[x][x];for (int i = 0; i < equations.size(); i++) {a = equations.get(i).get(0);b = equations.get(i).get(1);x = num.get(a);y = num.get(b);graph[x][y] = values[i];//x/ygraph[y][x] = 1 / values[i];//y/x}for (int i = 0; i < graph.length; i++) {graph[i][i] = 1.0;//对角线全为1}//图初始化结束double[] res = new double[queries.size()]; //结果集合double sum = 0.0;for (int i = 0; i < queries.size(); i++) {a = queries.get(i).get(0);b = queries.get(i).get(1);if (!num.containsKey(a) || !num.containsKey(b)) {res[i] = -1.0;continue;}x = num.get(a);y = num.get(b);boolean[] visited = new boolean[graph.length];sum = find(graph, x, y, visited);//判断x到y是否可达if (sum == 0) {//不可达sum = -1.00000;}res[i] = sum;sum = 0.0;}return res;}
}
http://www.lqws.cn/news/200881.html

相关文章:

  • 【力扣】2434.使用机器人打印字典序最小的字符串
  • 实战二:开发网页端界面完成黑白视频转为彩色视频
  • 腾讯开源视频生成工具 HunyuanVideo-Avatar,上传一张图+一段音频,就能让图中的人物、动物甚至虚拟角色“活”过来,开口说话、唱歌、演相声!
  • 微前端 - Native Federation使用完整示例
  • 计算机是如何⼯作的
  • 【Linux shell】shell中的变量——构建脚本逻辑的基石
  • qt使用笔记二:main.cpp详解
  • PostgreSQL 的扩展pageinspect
  • 基于Python学习《Head First设计模式》第八章 模板方法模式
  • 基于Python学习《Head First设计模式》第七章 适配器和外观模式
  • moon服务器引擎-协议生成报错
  • 意识上传伦理前夜:我们是否在创造数字奴隶?
  • Scade 语言概念 - 方程(equation)
  • 1990-2023年 地级市人工智能企业数量-社科经管实证数据
  • Linux 文件系统与 I/O 编程核心原理及实践笔记
  • Python Cookbook-7.12 在 SQLite 中储存 BLOB
  • 华为云Flexus+DeepSeek征文|Dify - LLM 云服务单机部署大语言模型攻略指南
  • 又是一年高考季
  • 台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐
  • 《经济学原理》第9版第6章供给、需求和政府政策
  • 性能优化笔记
  • IT学习方法与资料分享
  • Srping Cloud Gateway 跨域配置 CorsWebFilter
  • 使用 Ansible 在 Windows 服务器上安装 SSL 证书系列之二
  • Qt Quick Test模块功能及架构
  • java_网络服务相关_gateway_nacos_feign区别联系
  • DeepSeek09-open-webui使用
  • 第二十八课:深度学习及pytorch简介
  • 现代C++特性(一):基本数据类型扩展
  • 低功耗MQTT物联网架构Java实现揭秘