網路達人
工程師想要找到乙個網路裡面的網路達人,假設使用者數為n
,有m
個關注關係對(a, b)
。(a,b)
表示使用者a
關注了使用者b
。關注關係具有傳遞性, 例如:使用者a
關注了使用者b
,使用者b
關注使用者c
,那麼認為使用者a
間接關注了使用者c
。如果乙個使用者被所有n
個使用者關注或者間接關注(自己關注自己算乙個),那麼我們認為這個使用者是網路達人
。
示例:
輸入:
3# 代表 n
3# 代表 m12
2123
# 空格分隔 m*2 個整數,表示關注關係對
輸出:1
# 網路達人數
(1)很顯然,這種關注關係是可以組成乙個有向圖的,所以可以先把二元關係轉成鄰接矩陣儲存。
(2)然後依次選出乙個使用者,初始化乙個佇列,併入隊。
(3)然後對佇列進行操作,佇列元素依次出隊,找到自己的粉絲,然後入隊(重複的不要),出隊的過程中,是假出隊,保留佇列元素,方便後續計算。
# @time :2018/09/09
# @author :xing
# 圖 佇列
class
solution:
defsolve
(self, n, m, nums):
follow =
for i in range(0, 2 * m, 2): # 提取2元關係
graph = [[0] * (n + 1) for _ in range(n + 1)]
for x, y in follow: # 構建鏈結矩陣
graph[x][y] = 1
cnt = 0
for user in range(1, n + 1): # 遍歷每乙個使用者
qlist =
i = 0
# 第乙個隊首元素位置
while(i < len(qlist)):
x = qlist[i] # 出隊
i += 1
# 下乙個將要出隊的元素
for j in range(1, n + 1): # 找粉絲
if graph[j][x] == 1
and j not
in qlist:
if len(qlist) == n: # 是否為被 n 個使用者直接或者間接關注,(包括自己)
cnt += 1
return cnt
if __name__ == "__main__":
# n = int(input())
# m = int(input())
# nums = list(map(int, input().split()))
n, m, nums = 3, 3, [1, 2, 2, 1, 2, 3]
solu = solution()
print(solu.solve(n, m, nums))
宣告:總結學習,有問題可以批評指正,大神可以略過哦。 演算法題 數字遊戲問題 Python
給定兩個正數m,n 0 m n 現在求,從m開始,只能加1,或者乘以2最後得到n的最小操作次數。很顯然是乙個動態規劃題目,首先考慮乙個m 1的情況,不難得出dp方程 dp 1 0 n為偶數 dp n min dp n 1 1,dp n 2 1 n為奇數 dp n min dp n 1 1,dp n ...
Python 演算法題
演算法題 提供乙個序列,完成對這個序列的分割。要求分割後的兩個序列彼此差值最小 實現函式,返回兩個序列 count 0def func i i.sort global count count 1print i i print count count ifnot i return elif len i...
演算法題 最小絕對值問題 Python
給定乙個數列 nums 裡面全是整數,且所有數字子不重複,求數列任中任意兩個值差的最小絕對值是多少?因為沒有重複項,那麼可以採用桶排序,然後遍歷獲取最小值,其實如果有重複項,也沒有關係,依舊可以採用桶排序,如果排序後長度減少,那麼絕對值最小的一定是0,因為有重複項嗎。面試題,最小絕對值,解題思路,桶...