日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

990. Satisfiability of Equality Equations

發(fā)布時(shí)間:2024/5/7 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 990. Satisfiability of Equality Equations 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Title

給定一個(gè)由表示變量之間關(guān)系的字符串方程組成的數(shù)組,每個(gè)字符串方程 equations[i] 的長(zhǎng)度為 4,并采用兩種不同的形式之一:“a==b” 或 “a!=b”。在這里,a 和 b 是小寫字母(不一定不同),表示單字母變量名。

只有當(dāng)可以將整數(shù)分配給變量名,以便滿足所有給定的方程時(shí)才返回 true,否則返回 false。

示例 1:

輸入:["a==b","b!=a"]
輸出:false

解釋:如果我們指定,a = 1 且 b = 1,那么可以滿足第一個(gè)方程,但無法滿足第二個(gè)方程。沒有辦法分配變量同時(shí)滿足這兩個(gè)方程。

示例 2:

輸出:["b==a","a==b"]
輸入:true

解釋:我們可以指定 a = 1 且 b = 1 以滿足滿足這兩個(gè)方程。

示例 3:*

輸入:["a==b","b==c","a==c"]
輸出:true

示例 4:

輸入:["a==b","b!=c","c==a"]
輸出:false

示例 5:

輸入:["c==c","b==d","x!=z"]
輸出:true

提示:

1 <= equations.length <= 500
equations[i].length == 4
equations[i][0] 和 equations[i][3] 是小寫字母
equations[i][1] 要么是 ‘=’,要么是 ‘!’
equations[i][2] 是 ‘=’

Solve

并查集

可以將每一個(gè)變量看作圖中的一個(gè)節(jié)點(diǎn),把相等的關(guān)系==看作是兩個(gè)節(jié)點(diǎn)的邊,由于表示相等關(guān)系的等式方程具有傳遞性,即所有相等的變量屬于同一個(gè)連通分量,因此可以使用并查集來維護(hù)這種連通分量。

首先遍歷所有的等式,構(gòu)造并查集,同一個(gè)等式中的兩個(gè)變量屬于同一個(gè)連通分量,因此將兩個(gè)變量進(jìn)行合并。

然后遍歷所有的不等式,同一個(gè)不等式中的兩個(gè)變量不能屬于同一個(gè)連通分量,因此對(duì)兩個(gè)變量分別查找其所在的連通分量,如果兩個(gè)變量在同一個(gè)連通分量中,則產(chǎn)生矛盾,返回False。

如果遍歷完所有的不等式?jīng)]有發(fā)現(xiàn)矛盾,則返回True。

具體實(shí)現(xiàn)方面,使用一個(gè)數(shù)組 parent 存儲(chǔ)每個(gè)變量的連通分量信息,其中的每個(gè)元素表示當(dāng)前變量所在的連通分量的父節(jié)點(diǎn)信息,如果父節(jié)點(diǎn)是自身,說明該變量為所在的連通分量的根節(jié)點(diǎn)。

一開始所有變量的父節(jié)點(diǎn)都是它們自身。對(duì)于合并操作,我們將第一個(gè)變量的根節(jié)點(diǎn)的父節(jié)點(diǎn)指向第二個(gè)變量的根節(jié)點(diǎn);對(duì)于查找操作,我們沿著當(dāng)前變量的父節(jié)點(diǎn)一路向上查找,直到找到根節(jié)點(diǎn)。

復(fù)雜度分析

時(shí)間復(fù)雜度:O(n+ClogC),其中 n 是 equations 中的方程數(shù)量,C 是變量的總數(shù),在本題中變量都是小寫字母,即 C≤26。上面的并查集代碼中使用了路徑壓縮優(yōu)化,對(duì)于每個(gè)方程的合并和查找的均攤時(shí)間復(fù)雜度都是 O(logC)。由于需要遍歷每個(gè)方程,因此總時(shí)間復(fù)雜度是 O(n+ClogC)。

空間復(fù)雜度:O?。創(chuàng)建一個(gè)數(shù)組 parent 存儲(chǔ)每個(gè)變量的連通分量信息,由于變量都是小寫字母,因此 parent 是長(zhǎng)度為 C。

Code

class Solution:class UnionFind:def __init__(self):self.parent = list(range(26))def find(self, index):if index == self.parent[index]:return indexself.parent[index] = self.find(self.parent[index])return self.parent[index]def union(self, index1, index2):self.parent[self.find(index1)] = self.find(index2)def equationsPossible(self, equations: List[str]) -> bool:uf = Solution.UnionFind()for item in equations:if item[1] == '=':index1 = ord(item[0]) - ord("a")index2 = ord(item[3]) - ord("a")uf.union(index1, index2)for item in equations:if item[1] == '!':index1 = ord(item[0]) - ord("a")index2 = ord(item[3]) - ord("a")if uf.find(index1) == uf.find(index2):return Falsereturn True

總結(jié)

以上是生活随笔為你收集整理的990. Satisfiability of Equality Equations的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。