LeetCode第210場周賽解題報告

2021-10-24 15:59:06 字數 4861 閱讀 2531

賽況

共四題,完成三題。第一題一遍過,第二題因為陣列開錯位置尷尬了一段時間,第三題先打了個模擬,然後突然想出正解,簡單debug幾次後通過。前面debug時間有點久,第四題沒來得及看,於是放棄了。題目

2.1 括號的最大巢狀深度

如果字串滿足一下條件之一,則可以稱之為 有效括號字串(valid parentheses string,可以簡寫為 vps):

字串是乙個空字串 「」,或者是乙個不為 「(」 或 「)」 的單字元。

字串可以寫為 ab(a 與 b 字串連線),其中 a 和 b 都是 有效括號字串 。

字串可以寫為 (a),其中 a 是乙個 有效括號字串 。

類似地,可以定義任何有效括號字串 s 的 巢狀深度 depth(s):

depth("") = 0

depth(a + b) = max(depth(a), depth(b)),其中 a 和 b 都是 有效括號字串

depth("(" + a + 「)」) = 1 + depth(a),其中 a 是乙個 有效括號字串

例如:""、"()()"、"()(()())" 都是 有效括號字串(巢狀深度分別為 0、1、2),而 「)(」

、"(()" 都不是 有效括號字串 。

給你乙個 有效括號字串 s,返回該字串的 s 巢狀深度 。

示例 1:

輸入:s =

「(1+(2*3)+((8)/4))+1」

輸出:3

解釋:數字 8 在巢狀的 3 層括號中。

示例 2:

輸入:s =

「(1)+((2))+(((3)))」

輸出:3

示例 3:

輸入:s =

「1+(2*3)/(2-1)」

輸出:1

示例 4:

輸入:s =

「1」輸出:0

1 <= s.length

<= 100

s 由數字 0-9 和字元 『+』、』-』、』*』、』/』、』(』、』)』 組成

題目資料保證括號表示式 s 是 有效的括號表示式

2.2 最大網路秩

n 座城市和一些連線這些城市的道路 roads 共同組成乙個基礎設施網路。每個 roads[i] = [ai, bi] 都表示在城市 ai 和 bi 之間有一條雙向道路。

兩座不同城市構成的 城市對 的 網路秩 定義為:與這兩座城市 直接 相連的道路總數。如果存在一條道路直接連線這兩座城市,則這條道路只計算 一次 。

整個基礎設施網路的 最大網路秩 是所有不同城市對中的 最大網路秩 。

給你整數 n 和陣列 roads,返回整個基礎設施網路的 最大網路秩 。

示例 1:

輸入:n = 4, roads =

[[0,1],[0,3],[1,2],[1,3]]

輸出:4

解釋:城市 0 和 1 的網路秩是 4,因為共有 4 條道路與城市 0 或 1 相連。位於 0 和 1 之間的道路只計算一次。

示例 2:

輸入:n = 5, roads =

[[0,1],[0,3],[1,2],[1,3],[2,3],[2,4]]

輸出:5

解釋:共有 5 條道路與城市 1 或 2 相連。

示例 3:

輸入:n = 8, roads =

[[0,1],[1,2],[2,3],[2,4],[5,6],[5,7]]

輸出:5

解釋:2 和 5 的網路秩為 5,注意並非所有的城市都需要連線起來。

2 <= n <=

1000 <=

roads.length <= n * (n - 1) / 2

roads[i].length

== 2

0 <= ai, bi <= n-1

ai != bi

每對城市之間 最多只有一條 道路相連

2.3 分割兩個字串得到回文串

給你兩個字串 a

和 b ,它們長度相同。請你選擇乙個下標,將兩個字串都在 相同的下標 分割開。由 a 可以得到兩個字串: aprefix 和 asuffix ,滿足 a = aprefix + asuffix ,同理,由 b 可以得到兩個字串 bprefix 和 bsuffix ,滿足 b = bprefix + bsuffix 。請你判斷 aprefix + bsuffix 或者 bprefix + asuffix 能否構成回文串。

當你將乙個字串 s 分割成 sprefix 和 ssuffix 時, ssuffix 或者 sprefix 可以為空。比方說, s = 「abc」 那麼 「」 + 「abc」 , 「a」 + 「bc」 , 「ab」 + 「c」 和 「abc」 + 「」 都是合法分割。

如果 能構成回文字串 ,那麼請返回 true,否則返回 false 。

請注意, x + y 表示連線字串 x 和 y 。

示例 1:

輸入:a =

「x」, b = 「y」

輸出:true

解釋:如果 a 或者 b 是回文串,那麼答案一定為 true ,因為你可以如下分割:

aprefix = 「」,

asuffix = 「x」

bprefix = 「」,

bsuffix = 「y」

那麼 aprefix + bsuffix = 「」

示例 2:

輸入:a =

「ulacfd」, b = 「jizalu」

輸出:true

解釋:在下標為 3 處分割:

aprefix =

「ula」, asuffix =

「cfd」

bprefix = 「jiz」,

bsuffix = 「alu」

那麼 aprefix + bsuffix =

「ula」 + 「alu」 = 「ulaalu」 是回文串。

1 <=

a.length, b.length <= 105

a.length ==

b.length

a 和 b 都只包含小寫英文本母

2.4 統計子樹中城市之間最大距離(放棄)

給你 n 個城市,編號為從 1 到 n 。同時給你乙個大小為 n-1 的陣列 edges ,其中 edges[i] = [ui, vi] 表示城市 ui 和 vi 之間有一條雙向邊。題目保證任意城市之間只有唯一的一條路徑。換句話說,所有城市形成了一棵 樹 。

一棵 子樹 是城市的乙個子集,且子集中任意城市之間可以通過子集中的其他城市和邊到達。兩個子樹被認為不一樣的條件是至少有乙個城市在其中一棵子樹中存在,但在另一棵子樹中不存在。

對於 d 從 1 到 n-1 ,請你找到城市間 最大距離 恰好為 d 的所有子樹數目。

請你返回乙個大小為 n-1 的陣列,其中第 d 個元素(下標從 1 開始)是城市間 最大距離 恰好等於 d 的子樹數目。

請注意,兩個城市間距離定義為它們之間需要經過的邊的數目。

示例 1:

輸入:n = 4, edges =

[[1,2],[2,3],[2,4]]

輸出:[3,4,0]

解釋:子樹 , 和 最大距離都是 1 。

子樹 ,

, 和 最大距離都為 2 。

不存在城市間最大距離為 3 的子樹。

示例 2:

輸入:n = 2, edges =

[[1,2]]

輸出:[1]

示例 3:

輸入:n = 3, edges = [[1,2],[2,3]]

輸出:[2,1]

2 <= n <= 15

edges.length ==

n-1edges[i].length

== 2

1 <= ui, vi <= n

題目保證 (ui, vi) 所表示的邊互不相同。思路

3.1 括號的最大巢狀深度

題意大概就是求乙個式子有多少層括號巢狀。

這裡想到用棧的思想。每當讀取到乙個左括號時候深度加一,每讀到乙個右括號時深度減一。

此操作等價於入棧和出棧。

3.2 最大網路秩

題意大概是求任意兩點總路線數目最大值。

這裡採用的方法是,先讀取邊,存到乙個一維陣列中,兩邊各加一,即得到每一點對應的邊總數。

由於可能會得到一種情況,即最大值對應的兩點有一條公共邊,因而額外加乙個二維陣列判斷哪兩點之間有邊,如果有,那麼答案減一。

最後i從0到n-2遍歷各點,另一維度j從i+1遍歷到n-1取最大值。

錯誤思想:我曾經試想sort每點邊數然後取兩個最大值。最大的問題在於我並不知道哪兩點直接有沒有邊,因此有1的誤差。

3.3 分割兩個字串得到回文

這道題如果用模擬,分離字串就太麻煩了。當然,我一開始就是這麼做的。

對於a和b兩個字串,在相同的位置斷開,,然後重新拼接。例如原來是mn 和xy,那麼拼成,my和nx。

於是從字串a的左側和b的右側分別開始遍歷。

同理,從字串a右側和b左側開始遍歷。

3.4 統計子樹中城市之間最大距離(未完成,待續)**

4.1 括號的最大巢狀深度

class solution ;

int maxx=0;

vectoreach;

vector>::iterator iter;

int maximalnetworkrank(int n, vector>&

roads)

for(int i=0;ians)?maxx:ans;

}

}

return maxx;

}};

4.3 分割兩個字串得到回文

class solution 

};

4.4 統計子樹中城市之間最大距離(未完成,待續)

LeetCode 第 210 場周賽 解題報告

知識點 棧 從前向後遍歷字串,只考慮 和 那麼在遍歷過程中,棧中元素數量的最大值即為答案。棧中的 可以理解為還沒遍歷到匹配的 即那些巢狀的 class solution else if c anw max anw,depth return anw 知識點 容斥設與點p直接相連邊的數量為d p d p...

leetcode 第132場周賽

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...

leetcode周賽 第176場

題目描述 給你乙個 m n 的矩陣 grid,矩陣中的元素無論是按行還是按列,都以非遞增順序排列。請你統計並返回 grid 中 負數 的數目。示例 1 輸入 grid 4,3,2,1 3,2,1,1 1,1,1,2 1,1,2,3 輸出 8 解釋 矩陣中共有 8 個負數。示例 2 輸入 grid 3...