leetcode 399. 除法求值(bfs)
给你一个变量对数组 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)相关推荐
- LeetCode 399 除法求值 题解
LeetCode 399 除法求值 题解 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[ ...
- LeetCode 399. 除法求值(图的DFS搜索)
1. 题目 给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字. 根据已知方程式求解问题,并返回计算结果.如果结果不存在,则返回 -1.0. 示例 : ...
- leetcode 399. Evaluate Division | 399. 除法求值(图的邻接表,DFS)
题目 https://leetcode.com/problems/evaluate-division/ 题解 题目看着复杂,实际上是图的 DFS. 例如,已知 a/b, b/c, c/d,想求 a/d ...
- 【LeetCode笔记】399. 除法求值(Java、图)
文章目录 题目描述 思路 && 代码 题目描述 第二道图题,大概是hot100里唯二的图题了.. 思路 && 代码 邻接矩阵存储,g[i][j] 代表 i / j 的值 ...
- 【每日一题】除法求值
文章目录 题目描述 题解 题目描述 399. 除法求值 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 ...
- leetcode_399. 除法求值
目录 一.题目内容 二.解题思路 三.代码 一.题目内容 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 ...
- python和c语言的对比_类C语言与Python负数除法求值间的差异
一直用Python做计算器用(有点大材小用了啊,呵呵).今天使用时,却发现一个诡异的现象,在C语言入门经典(第4版)说正负数除数取余操作的差别,就在Python上试验了一下,结果结成了完全不一样.下面 ...
- 并查集 - 除法求值
题目链接 将所有等式关系转化为同一变量的倍数. class Solution {public:vector<double> calcEquation(vector<vector< ...
- LeetCode实战:逆波兰表达式求值
题目英文 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are ...
最新文章
- Halide视觉神经网络优化
- Java基础提升篇:equals()方法和“==”运算符
- 【软考】2017年11月软件设计师上午真题9-12题答案解析
- OpenCV gapi模块绘制的实例(附完整代码)
- Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
- Directory /opt/jfrog/artifactory/var has bad permissions for user id 1030
- 如何在JS中应用正则表达式
- 一文读懂 IPv4 到 IPv6 的过渡技术
- linux基本管理命令,linux常用命令与基本管理
- Python中Numpy数组的归一化处理
- 加入功能区buttonRibbon Button到SP2010特定列表或库
- mysql数据库查询要注意事项_三种mysql高级查询技巧_数据库_mysql函数_课课家
- ubnt虚拟服务器端口转发,ubnt详细设置教程
- Markdown文本编辑器公式编辑在线工具
- oracle财务官方文档,oracle财务软件简明操作.docx
- 这次要是讲不明白Spring Cloud核心组件,那就白写了!
- 树莓派价格暴涨买不起?他们自己做了一块价格还不到1/4的开发板平替树莓派,还火到海外去了
- CentOS7像外部163邮箱发送邮件
- Linux2.6--中断机制中的 ksoftirqd
- #大三狗的日常总结与反思03#