399. 除法求值

hard后看

class Solution {

    static Map<String, String> parents;

    static Map<String, Double> val;


 

    public String find(String x) {

 

        if (!x.equals(parents.get(x))) {

            String tmpParent = parents.get(x);

            String root = find(tmpParent);

            double oldVal = val.get(x);

            val.put(x, oldVal * val.get(tmpParent));

            parents.put(x, root);

        }

        return parents.get(x);

    }

 

    public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {

        parents = new HashMap<>();

        val = new HashMap<>();

        int i = 0;

        for (List<String> equation : equations) {

            String from = equation.get(0);

            String to = equation.get(1);

            double cur = values[i];

            if (!parents.containsKey(from) && !parents.containsKey(to)) {

                parents.put(from, to);

                val.put(from, cur);

                parents.put(to, to);

                val.put(to, 1.0);

            } else if (!parents.containsKey(from)) {

                parents.put(from, to);

                val.put(from, cur);

            } else if (!parents.containsKey(to)) {

                parents.put(to, from);

                val.put(to, 1 / cur);

            } else {

                String pa = find(from);

                String pb = find(to);

                if (!pa.equals(pb)) {

                    parents.put(pa, pb);

                    val.put(pa, cur * val.get(to) / val.get(from));

                }

            }

            i++;

        }

        i = 0;

        double[] res = new double[queries.size()];

        for (List<String> query : queries) {

            String from = query.get(0);

            String to = query.get(1);

            if (!parents.containsKey(from) || !parents.containsKey(to)) {

                res[i++] = -1;

                continue;

            }

            String pa = find(from);

            String pb = find(to);

            if (!pa.equals(pb)) res[i] = -1;

            else {

                res[i] = val.get(from) / val.get(to);

            }

            i++;

        }

        return res;

    }

}

 

 

https://leetcode-cn.com/problems/evaluate-division/solution/zhen-zheng-de-xiao-bai-du-neng-kan-dong-de-bing-ch/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值