399. Evaluate Division
来源:互联网 发布:何炅情商知乎 编辑:程序博客网 时间:2024/06/01 08:49
结题思路是:
a/b=v
可以看成是一个又a点指向b点的有向图 边的权值为v
有了a指向b的边 就有 b指向a的边 大小为1/v
则求 c/v 的话就是在图中寻找一条由c指向v的边 将边上所有的权值相乘即可。
public class Solution { public double[] calcEquation(String[][] equations, double[] values, String[][] queries) { HashMap<String,ArrayList<String>> pairs=new HashMap<String,ArrayList<String>>(); HashMap<String,ArrayList<Double>> valuepairs=new HashMap<String,ArrayList<Double>>(); for(int i=0;i<equations.length;i++){ String[] equation = equations[i]; if(!pairs.containsKey(equation[0])){ pairs.put(equation[0], new ArrayList<String>()); } if(!pairs.containsKey(equation[1])){ pairs.put(equation[1], new ArrayList<String>()); } if(!valuepairs.containsKey(equation[0])){ valuepairs.put(equation[0],new ArrayList<Double>()); } if(!valuepairs.containsKey(equation[1])){ valuepairs.put(equation[1], new ArrayList<Double>()); } pairs.get(equation[0]).add(equation[1]); pairs.get(equation[1]).add(equation[0]); valuepairs.get(equation[0]).add(values[i]); valuepairs.get(equation[1]).add(1/values[i]); } double[] result=new double[queries.length]; for(int i=0;i<queries.length;i++) { double temp=DFS(queries[i][0],queries[i][1],pairs,valuepairs,new HashSet<String>(),1.0); if(temp==0.0) result[i]=-1.0; else result[i]=temp; } return result; } private double DFS(String start,String end,HashMap<String,ArrayList<String>> pairs,HashMap<String,ArrayList<Double>> valuepairs,HashSet<String> s,double value){ if(s.contains(start)) return 0.0; if(!pairs.containsKey(start)) return 0.0; if(start.equals(end)) return value; s.add(start); ArrayList<String> pair=pairs.get(start); ArrayList<Double> valuepair=valuepairs.get(start); double temp=0.0; for(int i=0;i<pair.size();i++){ temp=DFS(pair.get(i),end,pairs,valuepairs,s,value*valuepair.get(i)); if(temp!=0.0) break; } s.remove(start); return temp; }}
1 0
- 【Leetcode】399. Evaluate Division
- [leetcode]399. Evaluate Division
- 399. Evaluate Division
- leetcode:399. Evaluate Division
- 399. Evaluate Division
- LeetCode 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- [leetcode]399. Evaluate Division
- Leetcode 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- 399. Evaluate Division
- [LeetCode]399. Evaluate Division
- LeetCode: 399. Evaluate Division
- Leetcode-399. Evaluate Division
- 399. Evaluate Division
- 记单词027
- jzoj C组 2017.1.14 比赛
- Unix System brief structure
- keil数据类型占用的字节数
- Cocos error:Invalid indirect reference 0x62687930 in decodeIndirectRef
- 399. Evaluate Division
- C#中的分支结构:if..else if 、if... else 和 switch ...case语句的区别
- 获取前台进程包名(ForegroundProcess)
- Ubuntu16.04安装mysql
- 响应式开发(四)-----Bootstrap CSS----------Bootstrap CSS概览和相关注意事项
- 最小公倍数,最大公约数C语言(全)
- iOS开发之数据转模型(runtime)
- 10494Uva(二)高精度运算 易错点
- md5加密