leetcode每日一題 393 除法求值

2021-10-14 03:02:00 字數 2070 閱讀 9584

題目:

給你乙個變數對陣列 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.用字典來標識 有向圖的邊和權值,用集合來記錄 有向圖中的頂點

2.用floyd來求圖中任意2點的距離

3.遍歷字典,並返回結果

解答:

class

solution

:def

calcequation

(self, equations: list[list[

str]

], values: list[

float

], queries: list[list[

str]])

-> list[

float]:

from collections import defaultdict

graph = defaultdict(

int)

set1 =

set(

)for i in

range

(len

(equations)):

a, b = equations[i]

graph[

(a, b)

]= values[i]

graph[

(b, a)]=

1/values[i]

set1.add(a)

set1.add(b)

# floyd演算法,求圖中任意2點距離

arr =

list

(set1)

print

(arr)

for k in arr:

for i in arr:

for j in arr:

print

(i,k,j)

if graph[

(i, k)

]and graph[

(k, j)]:

print

(i,k,j)

graph[

(i, j)

]= graph[

(i, k)

]* graph[

(k, j)

]print

(graph[

(i,j)])

res =

for x, y in queries:

if graph[

(x, y)]:

(x, y)])

else:-

1)return res

以例1為例,看一下過程

每日一題 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 ...