国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

leetcode399. Evaluate Division

Jensen / 3204人閱讀

摘要:題目要求已知一些字母之間的關系式,問是否能夠計算出其它字母之間的倍數關系如已知問是否能夠計算出的值。這里的值因為在條件中無法獲知是否等于零,因此也無法計算其真實結果,也需要返回。即代表點指向點的邊的權重為,而點指向點的邊的全中為。

題目要求
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> equations, vector& values, vector> queries , where equations.size() == values.size(), and the values are positive. This represents the equations. Return vector.

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.

已知一些字母之間的關系式,問是否能夠計算出其它字母之間的倍數關系?
如已知a/b=2.0 b/c=3.0問是否能夠計算出a/c, b/a, a/e, a/a, x/x的值。如果無法計算得出,則返回-1。這里x/x的值因為在條件中無法獲知x是否等于零,因此也無法計算其真實結果,也需要返回-1。

思路和代碼

假如我們將除數和被除數看做是圖的頂點,將除數和被除數之間的倍數關系試做二者之間邊的權重。即a/b=2.0代表點a指向點b的邊的權重為2.0,而點b指向點a的邊的全中為1/2.0=0.5。

因此我們可以將輸入的表達式轉化為一個加權有向圖,而題目的問題則被轉化為求兩個點之間是否能夠找到一條邊,如果無法找到,則返回-1,否則返回路徑上每條邊的權重的乘積。

代碼如下:

    public double[] calcEquation(List> equations, double[] values, List> queries) {
        //圖的鏈式表示法
        Map> pairs = new HashMap<>();
        //圖上每條邊的權重
        Map> valuedPairs = new HashMap<>();
        for(int i = 0 ; i < equations.size() ; i++) {
            //獲取第i個方程式
            List equation = equations.get(i);
            String multiplied = equation.get(0);//被除數
            String multiplier = equation.get(1);//除數
            //如果被除數從來沒有添加到圖中,則將其作為頂點在圖中初始化
            if(!pairs.containsKey(multiplied)) {
                pairs.put(multiplied, new ArrayList<>());
                valuedPairs.put(multiplied, new ArrayList<>());
            }
            //如果除數從來沒有添加到圖中,則將其作為頂點在圖中初始化
            if(!pairs.containsKey(multiplier)) {
                pairs.put(multiplier, new ArrayList<>());
                valuedPairs.put(multiplier, new ArrayList<>());
            }
            //添加邊和邊的權重
            pairs.get(multiplied).add(multiplier);
            pairs.get(multiplier).add(multiplied);
            valuedPairs.get(multiplied).add(values[i]);
            valuedPairs.get(multiplier).add(1.0 / values[i]);
        }
        
        //結果集
        double[] result = new double[queries.size()];
        for(int i = 0 ; i(), 1.0);
            result[i] = result[i]==0.0 ? -1.0 : result[i];
        }
        return result;
    }
    
    public double dfs(String multiplied, String multiplier, Map> pairs, Map> valuedPairs, Set visited, double curResult) {
        //如果圖中不包含該被除數頂點,則無法獲知該表達式的值
        if(!pairs.containsKey(multiplied)) return 0.0;
        //如果再次訪問過該被除數,說明找到了一條環路,則該深度優先遍歷結果失敗,直接拋棄
        if(visited.contains(multiplied)) return 0.0;
        //如果被除數等于除數,則返回1.0
        if(multiplied.equals(multiplier)) return curResult;
        visited.add(multiplied);
        //獲得當前被除數的所有鄰接頂點
        List multipliers = pairs.get(multiplied);
        //獲得所有鄰接邊的權重
        List multiplierValues = valuedPairs.get(multiplied);
        double tmp = 0.0;
        for(int i = 0 ; i           
               
                                           
                       
                 

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74416.html

相關文章

  • [LeetCode] 399. Evaluate Division

    Problem 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 ...

    BlackMass 評論0 收藏0
  • 399. Evaluate Division

    摘要:建好圖之后就是查找了,圖里面查找用或者都可以,寫起來簡單點。復雜度沒什么差別都是,這道題里面最多是,所以每次查找的復雜度是,有次查找。注意防止重復路徑,要用。 399. Evaluate Division 題目鏈接:https://leetcode.com/problems... 無向圖里找路徑的問題,用鄰接鏈或者鄰接矩陣來建圖,用鄰接鏈的話注意兩個方向,a/b的時候,既要把b加到a的...

    yanest 評論0 收藏0
  • [LeetCode] 150. Evaluate Reverse Polish Notation

    Problem Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, *, /. Each operand may be an integer or another expression. Note: Division between two inte...

    KoreyLee 評論0 收藏0
  • LeetCode 150:逆波蘭表達式求值 Evaluate Reverse Polish Nota

    摘要:題目根據逆波蘭表示法,求表達式的值。給定逆波蘭表達式總是有效的。逆波蘭表達式又叫做后綴表達式。解題思路可以看出逆波蘭表達式中的每一個運算符屬于該運算符前的兩個數字間的運算。如如波蘭表達式則加號前兩個數字為。 題目: 根據逆波蘭表示法,求表達式的值。 有效的運算符包括 +, -, *, / 。每個運算對象可以是整數,也可以是另一個逆波蘭表達式。 Evaluate the value of...

    Turbo 評論0 收藏0
  • LeetCode 之 JavaScript 解答第150題 —— 逆波蘭表達式求值

    摘要:小鹿題目根據逆波蘭表示法,求表達式的值。給定逆波蘭表達式總是有效的。算法思路仔細觀察上述的逆波蘭表達式,可以發現一個規律就是每遇到一個操作符,就將操作符前的兩個操作數進行運算,將結果保存到原位置。 Time:2019/4/14Title: Evaluate Reverse Polish NotationDifficulty: MediumAuthor:小鹿 題目:Evaluate ...

    104828720 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<