力扣,990 等式方程的可滿足性,並查集

2021-10-07 09:04:59 字數 1835 閱讀 3557

等式方程的可滿足性

標準的並查集模板,將常用的parent陣列形式換成字典形式。

####如果我們將所有等式兩端,用並查集合並一波,那麼只需要查詢下,不等式的兩端有沒有在乙個等式的集合裡出現過就行了。

####整個**由,find_root,union_xy,find_xy組成,find_root查詢每個點的的根,union_xy是合併操作,find_xy用於在將等式合併完成後,查詢不等式兩邊是否在某個等式的集合中同時出現。

defequationspossible

(self, equations: list[

str])-

>

bool

: equ =

nequ =

parent =

dict()

rankx =

dict()

for d in equations:

x,y = d[0]

,d[-1]

parent[x]

='-1'

parent[y]

='-1'

rankx[x]=0

rankx[y]=0

if d[1]

=='='

:(x,y)

)else

:(x,y)

)####前面講等式和不等式分開放在equ和nequ中。

deffind_root

(x,parent)

:while parent[x]

!='-1'

: x = parent[x]

return x

defunion

(x,y,parent,rankx)

: x = find_root(x,parent)

y = find_root(y,parent)

if x != y:

if rankx[x]

>rankx[y]

: parent[y]

= x rankx[y]+=1

elif rankx[x]

>rankx[y]

: parent[x]

= y rankx[x]+=1

else

: parent[x]

= y rankx[x]+=1

deffind_xy

(x,y,parent)

: x = find_root(x,parent)

y = find_root(y,parent)

if x == y:

return

false

else

:return

true

for d in equ:

####將等式合併

x,y = d[0]

,d[1

] union(x,y,parent,rankx)

for d in nequ:

##看看不等式兩端有沒有在乙個等式的集合**現過?

x,y = d[0]

,d[1]if

not find_xy(x,y,parent)

:return

false

return

true

990 等式方程的可滿足性 leetcode

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 equations i 的長度為 4,並採用兩種不同的形式之一 a b 或 a b 在這裡,a 和 b 是小寫字母 不一定不同 表示單字母變數名。只有當可以將整數分配給變數名,以便滿足所有給定的方程時才返回 true,否則返回 false...

990 等式方程的可滿足性 medium

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 equations i 的長度為 4,並採用兩種不同的形式之一 a b 或 a b 在這裡,a 和 b 是小寫字母 不一定不同 表示單字母變數名。只有當可以將整數分配給變數名,以便滿足所有給定的方程時才返回 true,否則返回 false...

LeetCode 990 等式方程的可滿足性 中等

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 equations i 的長度為 4,並採用兩種不同的形式之一 a b 或 a b 在這裡,a 和 b 是小寫字母 不一定不同 表示單字母變數名。只有當可以將整數分配給變數名,以便滿足所有給定的方程時才返回 true,否則返回 false...