等式方程的可滿足性
標準的並查集模板,將常用的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...