leetcode每日一題,399,除法求值

2021-10-14 03:57:43 字數 2196 閱讀 7817

給你乙個變數對陣列 equations 和乙個實數值陣列 values 作為已知條件,

其中 equations[i] = [ai, bi] 和 values[i] 共同表示等式 ai / bi = values[i] 。

每個 ai 或 bi 是乙個表示單個變數的字串。

另有一些以陣列 queries 表示的問題,其中 queries[j] = [cj, dj] 表示第 j 個問題,

請你根據已知條件找出 cj / dj = ? 的結果作為答案。

返回 所有問題的答案 。如果存在某個無法確定的答案,則用 -1.0 替代這個答案。

注意:輸入總是有效的。你可以假設除法運算中不會出現除數為 0 的情況,且不存在任何矛盾的結果。

示例 1:

輸入:

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

輸出:[6.00000,0.50000,-1.00000,1.00000,-1.00000]

解釋:條件: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 ]

示例 2:

輸入:equations = [["a","b"],["b","c"],["bc","cd"]], values = [1.5,2.5,5.0], queries = [["a","c"],["c","b"],["bc","cd"],["cd","bc"]]

輸出:[3.75000,0.40000,5.00000,0.20000]

示例 3:

輸入:equations = [["a","b"]], values = [0.5], queries = [["a","b"],["b","a"],["a","c"],["x","y"]]

輸出:[0.50000,2.00000,-1.00000,-1.00000]

簡單解釋下,equations 就是一組成對的變數, 比如是a,b。第i對變數對應values[i]就是a/b的值,

然後queries 就是一組要求的值

實現**:

//如果給出a/b就能得到b/a,而已知a/b,b/c則可以由(a/b)*(b/c)得出a/c,所以求a/c問題

//相當於求乙個圖中a->c的路徑的乘積。用dfs求路徑,要注意圖中可能有環

func calcequation(equations string, values float64, queries string) float64

id := map[string]int{}

n := 0

for i := 0; i < len(equations); i++

if _, ok := id[b]; !ok

} g := make(float64, n)

for i := 0; i < n; i++

for i := 0; i < len(equations); i++

for i := 0; i < len(queries); i++

if _, ok := id[queries[i][1]]; !ok

visited := make(bool, n)

a, b := id[queries[i][0]], id[queries[i][1]]

visited[a] = true

} return ret

} func getpathmult(g float64, visited bool, a, b int) float64

for i := 0; i < len(g[a]); i++

visited[i] = true

r := getpathmult(g, visited, i, b)

if r > 0

visited[i] = false

} }return -1

}

結果:

提交記錄

22 / 22 個通過測試用例

狀態:通過

執行用時: 0 ms

記憶體消耗: 2.1 mb

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...

LeetCode每日一題(題139)

題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...