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

力扣面试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.lryc.cn/news/2404702.html

相关文章:

  • SQL进阶之旅 Day 20:锁与并发控制技巧
  • 美业破局:AI智能体如何用数据重塑战略决策(5/6)
  • 生成模型+两种机器学习范式
  • 【学习笔记】Python金融基础
  • 在Linux查看电脑的GPU型号
  • A Execllent Software Project Review and Solutions
  • windows命令行面板升级Git版本
  • Langgraph实战--自定义embeding
  • 大故障,阿里云核心域名疑似被劫持
  • 什么是「镜像」?(Docker Image)
  • SQLMesh实战:用虚拟数据环境和自动化测试重新定义数据工程
  • 服务器健康摩尔斯电码:深度解读S0-S5状态指示灯
  • 设计模式基础概念(行为模式):模板方法模式 (Template Method)
  • 传统业务对接AI-AI编程框架-Rasa的业务应用实战(番外篇2)-- Rasa 训练数据文件的清理
  • LVDS的几个关键电压概念
  • 2023年ASOC SCI2区TOP,随机跟随蚁群优化算法RFACO,深度解析+性能实测
  • DLL动态库实现文件遍历功能(Windows编程)
  • Java Map完全指南:从基础到高级应用
  • jvm 垃圾收集算法 详解
  • [特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
  • Nginx Stream 层连接数限流实战ngx_stream_limit_conn_module
  • Spring Boot 定时任务的使用
  • Flutter:下拉框选择
  • SpringAI(GA):Nacos2下的分布式MCP
  • AC68U刷梅林384/386版本后不能 降级回380,升降级解决办法
  • [AI绘画]sd学习记录(二)文生图参数进阶
  • CRM管理系统中的客户分类与标签管理技巧:提升转化率的核心策略
  • 怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗
  • 【AI系列】BM25 与向量检索
  • windows10搭建nfs服务器