码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]Graph-399. Evaluate Division

时间:2018-01-13 21:01:59      阅读:32      评论:0      收藏:0      [点我收藏+]

标签:real   count   push   2.0   bsp   sum   solution   vector   ==   

Equations are given in the format A / B = k, where  A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the answer does not exist, return -1.0.

Example:
Given a / b = 2.0, b / c = 3.0. 
queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? . 
return [6.0, 0.5, -1.0, 1.0, -1.0 ].

The input is: vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries , where equations.size() == values.size(), and the values are positive. This represents the equations. Return vector<double>.

According to the example above:

equations = [ ["a", "b"], ["b", "c"] ],
values = [2.0, 3.0],
queries = [ ["a", "c"], ["b", "a"], ["a", "e"], ["a", "a"], ["x", "x"] ]. 

 

The input is always valid. You may assume that evaluating the queries will result in no division by zero and there is no contradiction.

class Solution {  
public:  
    vector<double> calcEquation(vector<pair<string, string>> equations,   
        vector<double>& values, vector<pair<string, string>> queries) {  
        unordered_map<string, unordered_map<string, double>> hash;  
        for(int i = 0; i < equations.size(); i++)   
        {  
            hash[equations[i].first][equations[i].second] = values[i];  
            hash[equations[i].second][equations[i].first] = 1/values[i];  
        }  
        for(auto val: hash) hash[val.first][val.first] = 1;  
        for(auto val1: hash)  
        {  
            for(auto val2: hash)  
                for(auto val3: hash)  
                    if(hash[val1.first].count(val3.first)   
                            && hash[val2.first].count(val1.first))  
                        hash[val2.first][val3.first] =   
                            hash[val2.first][val1.first]*hash[val1.first][val3.first];  
        }  
        vector<double> ans;  
        for(auto val: queries)  
            ans.push_back(hash[val.first].count(val.second)?hash[val.first][val.second]:-1);  
        return ans;  
    }  
};  

 

[leetcode]Graph-399. Evaluate Division

标签:real   count   push   2.0   bsp   sum   solution   vector   ==   

原文地址:https://www.cnblogs.com/chenhan05/p/8280287.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!