美文网首页
LeetCode399. 除法求值

LeetCode399. 除法求值

作者: lhsjohn | 来源:发表于2019-04-28 22:24 被阅读0次

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

示例 :
给定 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 ]

输入为: vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries(方程式,方程式结果,问题方程式), 其中 equations.size() == values.size(),即方程式的长度与方程式结果长度相等(程式与结果一一对应),并且结果值均为正数。以上为方程式的描述。 返回vector<double>类型。

基于上述例子,输入如下:

equations(方程式) = [ ["a", "b"], ["b", "c"] ],
values(方程式结果) = [2.0, 3.0],
queries(问题方程式) = [ ["a", "c"], ["b", "a"], ["a", "e"], ["a", "a"], ["x", "x"] ].
输入总是有效的。你可以假设除法运算中不会出现除数为0的情况,且不存在任何矛盾的结果

思路:用一个HashMap映射字符串到一个数字序号的索引,将方程式中的点构成一个图,
例如equations(方程式) = [ ["a", "b"], ["b", "c"] ], 可以构成a->b,b->c的图,权重即为a/b和b/c;
之后进行计算,凡是图中可以到达的地方,便重新计算出权值。

class Solution {

    double[][] map ;
    public double[] calcEquation(String[][] equations, double[] values, String[][] queries) {

        map = new double[26][26];
        Map<String ,Integer> hashMap = new HashMap<>();
        int count = 0;
        for (int i=0;i<equations.length;i++){
            if (!hashMap.containsKey(equations[i][0])){
                hashMap.put(equations[i][0],count++);
            }
            if (!hashMap.containsKey(equations[i][1])){
                hashMap.put(equations[i][1],count++);
            }
        }

        for (int i=0;i<equations.length;i++){
            int indexA = hashMap.get(equations[i][0]);
            int indexB = hashMap.get(equations[i][1]);
            map[indexA][indexB] = values[i];
            map[indexB][indexA] = 1/values[i];
            map[indexA][indexA] = 1;
            map[indexB][indexB] = 1;
        }


        for (int i=0;i<map.length;i++){
            for (int j=0;j<map[0].length;j++){
                if (map[i][j]>0){
                    for (int k = 0; k<map[0].length;k++){
                        if (map[j][k]>0){
                            map[i][k] = map[i][j] * map[j][k];
                        }
                    }
                }
            }
        }

        double[] result = new double[queries.length];

        for (int i=0;i<queries.length;i++){
            if (!hashMap.containsKey(queries[i][0]) || !hashMap.containsKey(queries[i][1])){
                 result[i] = -1.0;
                 continue;
            }

            int indexA = hashMap.get(queries[i][0]);

            int indexB = hashMap.get(queries[i][1]);

            if (map[indexA][indexB]==0){
                result[i] = -1.0;
            }else{
                result[i]=map[indexA][indexB];
            }


        }

        return result;



    }
}


相关文章

  • LeetCode399. 除法求值

    给出方程式 A / B = k, 其中 A 和 B 均为代表字符串的变量, k 是一个浮点型数字。根据已知方程式求...

  • 399. 除法求值

    解法 并查集的思想,将数组转化为图中的权重边,并进行缩短路径,每个都指向根节点

  • 399. 除法求值(Python)

    题目 难度:★★★★☆类型:图方法:深度优先搜索 力扣链接请移步本题传送门更多力扣中等题的解决方案请移步力扣中等题...

  • LC399-除法求值

    题目 题目分析 用到的数据结构:map,map的取值,求值。1、遍历得到所有的字母,然后映射成数字。2、将数字组建...

  • 《每周一道算法题》(一)逆波兰表达式求值

    一 逆波兰表达式求值 150. 逆波兰表达式求值 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换...

  • iOS算法题(一)逆波兰表达式求值

    一 逆波兰表达式求值 150. 逆波兰表达式求值 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换...

  • 多项式求值(利用大除法)

    欢迎关注公z号:沈阳奥数 下面我们看一下大除法在多项式求值的应用 多项式求值 例题:已知x²-2x-1=0,求2x...

  • Swift Collection 中的 lazy 作用

    惰性求值 惰性求值常见于函数式编程中,也有人把惰性求值翻译成延迟求值(Lazy Evaluation)。它的目的是...

  • Python中的优化:惰性求值详解

    惰性求值,也就是延迟求值,表达式不会在它被绑定到变量之后就立即求值,而是等用到时再求值。这个特性可以解决一些巨大甚...

  • Python学习笔记(二)几种除法的比较

    传统除法(' /')、真除法、floor除法(' // ') ·传统除法和真除法:在Python2.7之前,对整数...

网友评论

      本文标题:LeetCode399. 除法求值

      本文链接:https://www.haomeiwen.com/subject/wjysnqtx.html