leetcode千題 5536 最大網路秩

2021-10-24 16:03:17 字數 1823 閱讀 9222

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 <= 100

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

roads[i].length == 2

0 <= ai, bi <= n-1

ai != bi

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

先遍歷一遍找到所有節點的邊數

然後再遍歷一遍找到最多和次多邊數的節點集合

然後遍歷集合

class

solution

:def

maximalnetworkrank

(self, n:

int, roads: list[list[

int]])

->

int:

ans =[0

]*105 m1 =

0 m1 =

0 d1 =

d2 =

for i in roads:

ans[i[0]

]+=1 ans[i[1]

]+=1for i in

range

(n):

if ans[i]

>= m1:

m2 = m1

m1 = ans[i]

elif ans[i]

> m2:

m2 = ans[i]

for i in

range

(n):

if ans[i]

== m1:

if ans[i]

== m2:

maxx =

0for x in d1:

for y in d2:

if x!=y:if(

[x,y]

in roads)or(

[y,x]

in roads)

:if ans[x]

+ans[y]-1

>maxx:

maxx = ans[x]

+ans[y]-1

else

:if ans[x]

+ans[y]

>maxx:

maxx = ans[x]

+ans[y]

return maxx

Leetcode千題 1 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...

Leetcode千題 968 兩數之和

給定乙個二叉樹,我們在樹的節點上安裝攝像頭。節點上的每個攝影頭都可以監視其父物件 自身及其直接子物件。計算監控樹的所有節點所需的最小攝像頭數量。首先要表示節點的狀態flag 沒有被覆蓋 0,被覆蓋 1,裝了攝像頭 2。可以用遞迴的形式,也可以根據貪心,看兩個字節點的情況。class solution...

leetcode千題 771 寶石與石頭

給定字串j 代表石頭中寶石的型別,和字串 s代表你擁有的石頭。s 中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。j 中的字母不重複,j 和 s中的所有字元都是字母。字母區分大小寫,因此 a 和 a 是不同型別的石頭。示例 1 輸入 j aa s aaabbbb 輸出 3...