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

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

返回 所有问题的答案 。如果存在某个无法确定的答案,则用 -1.0 替代这个答案。

注意:输入总是有效的。你可以假设除法运算中不会出现除数为 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 = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?
结果:[6.0, 0.5, -1.0, 1.0, -1.0 ]

代码

class Solution {class Pair{int index;double val;public Pair(int index, double val) {this.index = index;this.val = val;}}public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {Map<String,Integer> map=new HashMap<>();int cur=0;for(int i=0;i<equations.size();i++)//记录字符串和其编号{if(!map.containsKey(equations.get(i).get(0)))map.put(equations.get(i).get(0),cur++);if(!map.containsKey(equations.get(i).get(1)))map.put(equations.get(i).get(1),cur++);}List<Pair>[] lists=new List[cur];for(int i=0;i<lists.length;i++){lists[i]=new ArrayList<Pair>();}for(int i=0;i<equations.size();i++)//记录各个节点之间的权重{int va=map.get(equations.get(i).get(0)),vb=map.get(equations.get(i).get(1));lists[va].add(new Pair(vb,values[i]));lists[vb].add(new Pair(va,1/values[i]));}double[] ret=new double[queries.size()];for(int i=0;i<queries.size();i++){double res=-1;if(map.containsKey(queries.get(i).get(0))&&map.containsKey(queries.get(i).get(1)))//出现不存在的符号返回-1{int ia=map.get(queries.get(i).get(0)),ib=map.get(queries.get(i).get(1));if(ia==ib){res=1;}else{//bfs,找出去目标节点的路径Queue<Integer> queue=new LinkedList<>();queue.add(ia);double[] ra=new double[cur];Arrays.fill(ra,-1);//-1代表没到达的节点ra[ia]=1;while (!queue.isEmpty()&&ra[ib]<0){int now=queue.poll();for(Pair pair:lists[now]){int idx=pair.index;double val=pair.val;if(ra[idx]<0){ra[idx]=val*ra[now];queue.offer(idx);}}}res=ra[ib];}}ret[i]=res;}return ret;}
}

leetcode 399. 除法求值(bfs)相关推荐

  1. LeetCode 399 除法求值 题解

    LeetCode 399 除法求值 题解 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[ ...

  2. LeetCode 399. 除法求值(图的DFS搜索)

    1. 题目 给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字. 根据已知方程式求解问题,并返回计算结果.如果结果不存在,则返回 -1.0. 示例 : ...

  3. leetcode 399. Evaluate Division | 399. 除法求值(图的邻接表,DFS)

    题目 https://leetcode.com/problems/evaluate-division/ 题解 题目看着复杂,实际上是图的 DFS. 例如,已知 a/b, b/c, c/d,想求 a/d ...

  4. 【LeetCode笔记】399. 除法求值(Java、图)

    文章目录 题目描述 思路 && 代码 题目描述 第二道图题,大概是hot100里唯二的图题了.. 思路 && 代码 邻接矩阵存储,g[i][j] 代表 i / j 的值 ...

  5. 【每日一题】除法求值

    文章目录 题目描述 题解 题目描述 399. 除法求值 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 ...

  6. leetcode_399. 除法求值

    目录 一.题目内容 二.解题思路 三.代码 一.题目内容 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 ...

  7. python和c语言的对比_类C语言与Python负数除法求值间的差异

    一直用Python做计算器用(有点大材小用了啊,呵呵).今天使用时,却发现一个诡异的现象,在C语言入门经典(第4版)说正负数除数取余操作的差别,就在Python上试验了一下,结果结成了完全不一样.下面 ...

  8. 并查集 - 除法求值

    题目链接 将所有等式关系转化为同一变量的倍数. class Solution {public:vector<double> calcEquation(vector<vector< ...

  9. LeetCode实战:逆波兰表达式求值

    题目英文 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are ...

最新文章

  1. Halide视觉神经网络优化
  2. Java基础提升篇:equals()方法和“==”运算符
  3. 【软考】2017年11月软件设计师上午真题9-12题答案解析
  4. OpenCV gapi模块绘制的实例(附完整代码)
  5. Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
  6. Directory /opt/jfrog/artifactory/var has bad permissions for user id 1030
  7. 如何在JS中应用正则表达式
  8. 一文读懂 IPv4 到 IPv6 的过渡技术
  9. linux基本管理命令,linux常用命令与基本管理
  10. Python中Numpy数组的归一化处理
  11. 加入功能区buttonRibbon Button到SP2010特定列表或库
  12. mysql数据库查询要注意事项_三种mysql高级查询技巧_数据库_mysql函数_课课家
  13. ubnt虚拟服务器端口转发,ubnt详细设置教程
  14. Markdown文本编辑器公式编辑在线工具
  15. oracle财务官方文档,oracle财务软件简明操作.docx
  16. 这次要是讲不明白Spring Cloud核心组件,那就白写了!
  17. 树莓派价格暴涨买不起?他们自己做了一块价格还不到1/4的开发板平替树莓派,还火到海外去了
  18. CentOS7像外部163邮箱发送邮件
  19. Linux2.6--中断机制中的 ksoftirqd
  20. #大三狗的日常总结与反思03#

热门文章

  1. leetcode(977)有序数组的平方
  2. 数据库设计的核心原则 外键的设计 提高插入数据速度
  3. 彻底学会使用epoll(一)——ET模式实现分析
  4. Redis成神之路电子版教程已问世,面试题+笔记+项目实战
  5. Linux系统中nc工具那些不为人知的用法
  6. aspnetcore源码学习(一)
  7. EF ++属性会更新实体
  8. 异常作业2(2018.08.22)
  9. DataGridView控件用法二:常用属性
  10. 让不支持h5新标签的浏览器支持新标签