阿里巴巴2018實習生 演算法工程師筆試題2

2021-08-19 22:00:53 字數 1287 閱讀 5660

# 阿里巴巴2018實習生-演算法工程師附加卷-程式設計題2  

# 解題思路:運用鄰接表的思想。定義兩個字典,s_pre存放前面路徑可以到達該路徑的結點編號,s_after存放該路徑可以到達的結點編號。遍歷一遍所有的邊,得出結果。

# created on 2023年5月12日

# @author: hobart

# s_pre

# s_after

# num

# 5 def maxpath(data):

num={}

s_pre={}

s_after={}

for value in data:

val_after= if value[0] in s_after and value[1] in s_after[value[0]] else [value[1]]

s_after[value[0]]=s_after.get(value[0],)+s_after.get(value[1],)+val_after # 該路徑上開始結點之後可以經過的結點

val_pre= if value[1] in s_pre and value[0] in s_pre[value[1]] else [value[0]]

s_pre[value[1]]= s_pre.get(value[1],)+s_pre.get(value[0],)+val_pre # 該路徑上結尾結點之前經過的結點

num[value[0]]=num.get(value[0],0)+1+(len(s_after[value[1]]) if value[1] in s_after else 0)#該路徑結點擁有的路徑數

if value[0] in s_pre: # 更近之前可以到達該路徑的結點所能到達的節點數

for i in s_pre[value[0]]:

num[i]=num[i]+1+(len(s_after[value[1]]) if value[1] in s_after else 0)

m=max(num.items(), key=lambda x: x[1])

return list(m)[1]

s = [[0, 1],[1, 2], [2, 3], [0, 2]]

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

data=sorted(s,key=lambda x: (x[0], x[1])) # 對資料進行從小到大排序

result=maxpath(data)

print(result)

阿里巴巴2018實習生 演算法工程師筆試題2

阿里巴巴2018實習生 演算法工程師附加卷 程式設計題2 筆試時間2018 05 11 19 30 解題思路 深度優先搜尋,用棧實現,符合的路徑一直入棧,直到找不到合適的新結點,然後出棧 每齣棧一次記錄一次路徑,出棧完成,則得出所有的路徑 time 2018 5 11 author liuyinxi...

阿里巴巴2017實習生招聘筆試題 演算法工程師

一 考慮一種常見的撲克牌洗牌方法,是將撲克牌 54張 平均分成兩份,然後隨機的將兩份撲克牌隨機的合併到一起。請問 1 經過這樣一次洗牌之後,撲克牌的順序最多有多少種可能性?2 至少經過多少次這樣的洗牌之後,撲克牌的順序接近完全隨機?給出乙個合理的下限。參 二 某城市實行隨機化小汽車指標拍賣搖號,每月...

阿里巴巴暑期實習生筆試題

1.kmp演算法 長度為n的主串t中匹配長度為m的子串p n m 匹配成功 存在p的每個字元依次和t中的乙個連續字串行相等 輸出主串中匹配串起始位置,匹配失敗輸出 1 思路 首先用o m 的時間對子串進行預處理,可通過子串本身的特性判斷出需要右移幾位才是可能匹配的 然後用o n 的時間去完成匹配 時...